2012-04-05 11 views
4

私はかなり単純なMaven化されたJavaプロジェクトを持っていますが、私の頭の中で頭がおかしくなりません。Mavenには親クラスが含まれています

私の親モジュールは、いくつかの子モジュールに役立つと期待されるたくさんの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クリーンパッケージを親フォルダまたは子フォルダの結果から実行すると、親からのクラスが記述されているときにいつでも "シンボルを見つけることができません"というメッセージが表示されます。

私は間違っていますか?

答えて

13

私はこのようなプロジェクトの構造を変更したい:

  • 親(親になるために使用されるすべてのクラスとjarファイル、)(POM)
    • コア
    • 子(戦争は、コアに依存します)

親:

<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> 
+2

また、あなたは子供をビルドする前にmvn cleanコアプロジェクトをインストールする必要があります。 – Alvin

+3

親に 'mvn clean install'を実行するので、すべてのモジュールが自動的に正しい順序でビルドされます。 – Roadrunner

+0

歓声、この設定はうまくいきました。 – Dave

1

あなたの親モジュールのパッケージは、「ポンポン」、何のjarファイルが提供されず、ノーの.classファイルとして保存されているので、それはその親

<dependency> 
    <groupId>my.group</groupId> 
    <artifactId>parent</artifactId> 
    <version>0.0.1</version> 
</dependency> 
2

に精通しているので、子モジュールのポンポンで内部の依存関係を追加しよう他のモジュールからアクセスできるようになります。それを "jar"に変更して試してみてください。

親を「jar」とするのは良い方法ではありませんが、私は "ポン"親に固執し、おそらく新しい "コア"または "共通"の子供を作り、私の "戦争"をそれに依存させるでしょう。

+4

"pom"モジュールは子モジュールを持つことができますが、私は理解しています。 – Dave

+0

ありがとう、私はその時それについて確かではなかった。 – n0rm1e

0

あなたが最初にすべきことは、このようなあなたの親でdependencyManagmeentブロック内のあなたの依存関係を定義することです:あなたの子供で

<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> 
関連する問題