2016-10-01 32 views
1

私は以下の設定でマルチモジュールプロジェクトを持っています。次のようにMavenマルチモジュールの依存関係、 - パッケージが存在しません(mavenプラグインクラスローダー)

<groupId>com.mycompany.abc</groupId> 
<artifactId>platform</artifactId> 
<version>1.0</version> 
<packaging>pom</packaging> 
<name>platform-parent</name> 

<modules> 
    <module>support/proj3-service</module> 
    <module>core/proj1-service</module> 
    <module>core/proj2-service</module> 
</modules> 

PROJ1 /のpom.xmlは、以下のように

<artifactId>proj1</artifactId> 
<version>1.0</version> 
<packaging>jar</packaging> 
<parent> 
    <groupId>com.mycompany.abc</groupId> 
    <artifactId>platform</artifactId> 
    <version>1.0</version> 
    <relativePath>../../pom.xml</relativePath> 
</parent> 

proj2 /のpom.xmlは、である(唯一の関連部品を含む)は、以下のように親POMである

/root/pom.xml 
/root/core/proj1/pom.xml 
/root/core/proj2/pom.xml 
/root/support 
/root/support/proj3/pom.xml 

ここで、proj3/pom .xmlファイル、プロジェクト3でプラグインがPROJ1とproj2に属するクラスを照会したい

<artifactId>proj3</artifactId> 
<version>1.0</version> 
<packaging>jar</packaging> 
<parent> 
    <groupId>com.mycompany.abc</groupId> 
    <artifactId>platform</artifactId> 
    <version>1.0</version> 
    <relativePath>../../pom.xml</relativePath> 
</parent> 
<dependencies> 
    <dependency> 
     <groupId>com.mycompany.abc</groupId> 
     <artifactId>proj1</artifactId> 
     <version>1.0</version> 
    </dependency> 
    <dependency> 
     <groupId>com.mycompany.abc</groupId> 
     <artifactId>proj2</artifactId> 
     <version>1.0</version> 
    </dependency> 
    </dependencies> 
    <build> 
    <plugins> 
     <plugin> 
     ... 
     </plugin> 
    </plugins> 
    </build> 

、依存関係としてPROJ1とproj2を追加イム。

プラグインクラスローダーのドキュメントによると、 プラグインクラスローダーには、現在のプロジェクトの依存関係もビルド出力も含まれていないことに注意してください。 ビルドプラグインを実行すると、スレッドのコンテキストクラスローダがプラグインクラスローダに設定されます。

プラグインクラスローダーに他のモジュールを認識させる方法はありますか?

+0

は、あなたが完全なエラー出力を投稿することができます... – khmarbaise

+0

@khmarbaiseは – Bharath

+3

編集したあなたは、エラーメッセージに記載されているモジュールをより深く見てみる必要があります-generation:コンパイルエラー at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212) '...それ以外は。これは完全なエラー出力ではありません...良いヒントを与えるより多くのものがあります.. – khmarbaise

答えて

2

問題は、親pomのmodulesタグにあります。
の代わりに:

<modules> 
    <module>support/proj3-service</module> 
    <module>core/proj1-service</module> 
    <module>core/proj2-service</module> 
</modules> 

それは次のようになります。

<modules> 
    <module>support/proj3</module> 
    <module>core/proj1</module> 
    <module>core/proj2</module> 
</modules> 
+0

はそれを数値化しています。原子炉のメカニズムを見てみましょう。それはmavenコアの一部です。 https://maven.apache.org/guides/mini/guide-multiple-modules.html – Bharath

+0

私が提案したことを少なくとも試しましたか? Mavenリアクターは、モジュール間の依存関係を判断してビルド順序を決定する責任がありますが、最初にモジュールを見つける場所を正しく指定する必要があります。あなたの質問で言及したディレクトリ構造に基づいて、 'proj3-service'、' proj2-service'などの名前のフォルダはありません。したがって、Mavenリアクタはあなたのモジュールを見つけることができず、ビルドは失敗します。まだ行われていない場合は、私が提案したことを一度試して、結果を知ることができます。 –

+0

私はすでにやりました。問題は、プラグインのクラスローダーがdepedencies jarを照会できないことです。 – Bharath

2

あなたはMavenのプラグインが表示さ/使用するための追加.jarsを追加したい場合は、プラグインに依存関係を追加することができます。そのような

何か: `プロジェクトのドキュメント上:

<build><plugins><plugin> 
<!-- other plugin option --> 
<dependencies> 
    <dependency> 
    <groupId>com.mycompany.abc</groupId> 
    <artifactId>proj1</artifactId> 
    <version>1.0</version> 
</dependency> 
<dependency> 
    <groupId>com.mycompany.abc</groupId> 
    <artifactId>proj2</artifactId> 
    <version>1.0</version> 
</dependency> 
</dependencies> 
</plugin></plugins></build> 
+0

私はこれを試しましたが、うまくいきませんでした。 – Bharath

関連する問題