11

私はかなり単純な Maven 化された Java プロジェクトを持っていますが、それを理解するのに苦労しています。

私の親モジュールは、いくつかの子モジュールで役立つと思われる多くの Java クラス (および依存関係) を定義しています。子モジュールの 1 つは Web アプリのデプロイ専用であるため、いくつかの追加クラス (サーブレット) と親モジュールのすべてが必要です。

ファイル構造はこんな感じ

 - parent
   - src
   - pom.xml
   - child
     - src
     - pom.xml

私の親ポンは次のようになります。

<project>
  <groupId>my.group</groupId>
  <artifactId>parent</artifactId>
  <version>0.0.1</version>
  <packaging>pom</packaging>

  ...

  <modules>
    <module>child</module>
  </modules>
</project> 

そして、子供は次のようになります。

<project>
  <artifactId>child</artifactId>
  <packaging>war</packaging>
  <parent>
    <artifactId>parent</artifactId>
    <groupId>my.group</groupId>
    <version>0.0.1</version>
  </parent>

  ...

</project>

親で定義されたクラスと依存関係について子に知らせる必要があるのはこれだけですか? そうではないようです:Eclipseはコンパイルエラーを出し、親フォルダーまたは子フォルダーからmvn clean packageを実行すると、親からのクラスが言及されるたびに「シンボルが見つかりません」というメッセージが表示されます。

私は何を間違っていますか?

4

4 に答える 4

17

プロジェクトの構造を次のように変更します。

  • 親(pom)
    • コア(jar、以前は親にあったすべてのクラス)
    • 子供(戦争、コアに依存)

親:

<project>
  <groupId>my.group</groupId>
  <artifactId>parent</artifactId>
  <version>0.0.1</version>
  <packaging>pom</packaging>

  <modules>
    <module>core</module>
    <module>child</module>
    <!-- possibly more modules... -->
  </modules>
</project>

芯:

<project>
  <parent>
    <groupId>my.group</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.1</version>
  </parent>
  <artifactId>core</artifactId>
  <packaging>jar</packaging>
</project>

子:

<project>
  <parent>
    <groupId>my.group</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.1</version>
  </parent>
  <artifactId>module1</artifactId>
  <packaging>war</packaging>

  <dependencies>
    <dependency>
      <groupId>my.group</groupId>
      <artifactId>core</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>
</project>
于 2012-04-05T07:53:04.710 に答える
4

親モジュールのパッケージは「pom」であるため、jar ファイルは提供されず、そこからの .class ファイルは他のモジュールにアクセスできません。「jar」に変更して、もう一度試してみてください。

親を「jar」にするのは良い習慣ではありませんが。私は「pom」親に固執し、おそらく新しい「コア」または「共通」子を作成し、「戦争」をそれに依存させます。

于 2012-04-05T07:40:38.373 に答える
2

子モジュール pom に内部依存関係を追加してみてください。そのため、その親モジュールに精通しています。

<dependency>
   <groupId>my.group</groupId>
   <artifactId>parent</artifactId>
   <version>0.0.1</version>
</dependency>
于 2012-04-05T07:40:34.097 に答える
0

最初に行うべきことは、次のように、親の依存関係管理ブロック内で依存関係を定義することです。

<dependencyManagement>
   <dependencies>
     <dependency>
       <groupId>group-a</groupId>
       <artifactId>artifact-a</artifactId>
       <version>1.0</version>
     </dependency>
     ...
   </dependencies>
</dependencyManagement>

さらに、あなたの子供では、あなたの子供が依存関係として使用したい依存関係を言う必要があります:

   <dependencies>
     <dependency>
       <groupId>group-a</groupId>
       <artifactId>artifact-a</artifactId>
       <!-- No version given. See dependencyManagement -->
     </dependency>
     ...
   </dependencies>
于 2012-04-05T07:42:06.927 に答える