2016-11-16 4 views
0

私は、マルチモジュール構造化されているMavenプロジェクトをEclipseに:共有 はどのようにMavenを持つすべてのサブモジュールのための世界的な依存関係を宣言し、次のように

  • サーバー
    • クライアント

私にとっては、これらのプロジェクトのすべてに対して単体テストを書くことは明らかです。

<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>4.12</version> 
    <scope>test</scope> 
</dependency> 

し、各サブモジュールでそれを使用し、FE:だから私はそれが以下のように親ののpom.xmlに依存関係を追加するenoughtされると思った

import static org.junit.Assert.assertEquals; 
import static org.junit.Assert.assertFalse; 
import static org.junit.Assert.assertNotNull; 
import static org.junit.Assert.assertTrue; 

が、私は、Eclipseのようにエラーを取得しています:The import org.junit cannot be resolved

私はMaven-> Updateプロジェクト、またはmvn clean installを実行するとエラーはまったくありません。

私は子供の親モジュール次のようにいずれかを参照してください。

<parent> 
    <groupId>pl.daniel.erp</groupId> 
    <artifactId>erp</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
</parent> 

あなたは親に依存関係を設定できますが、あなたはまだ子供モジュールに依存関係を指定する必要があります

+0

あなたは子POMSで親を宣言しましたか? – Compass

+0

ポストチェックを更新しました。 thx – masterdany88

+0

Hmmm。私は行きます:http:// stackoverflow。com/questions/3211643/maven2-sharing-dependencies-parents-and-children-without-redeclaring-depeを参照してください。それが問題でない場合は、Eclipseから完全なクリーンビルドを試してください。おそらく愚かな設定の問題か、Eclipseが動作して完全にクリーンアップする必要があります。 – Compass

答えて

1

AJNeufeld:

"しかし、あなたはまだ子供モジュールに依存関係を指定しなければなりません"

依存関係が<依存関係管理>にある場合のみ正しいです。 <の依存関係>を親の<の依存関係>に設定しようとし、子どもの中で全く同じ依存関係を設定しないでください。

親POM:

<project> 
... 
<dependencies> 
    ... 
    <dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>4.12</version> 
    <scope>test</scope> 
    </dependency> 
    ... 
<dependencies> 
... 
</project> 

子供POM:

<project> 
    ... 
    <!-- no junit dependency defined at all --> 
    ... 
</project> 
+0

'と' 'タグの違いは何ですか?なぜ両方存在するのか? – masterdany88

+0

は「抽象」宣言のようなものです(抽象クラ​​スと同じ考え:)どこでも親プロジェクトツリーでは共通の設定(バージョン、スコープなど)を宣言することができますが、定義されている場合のみ依存関係がクラスパスに追加されます<依存関係>にあります。それがdependencyManagementにある場合、実際の依存関係にはgroupId/artifactIdだけが必要です。したがって、階層設定のための余地があります... に同じです。また、プラグインを使用すると、大きな構成が可能になるので、はるかに便利です。 – Vadim

+0

だから... "grand-parent"は共通の設定でを持つことができます。その子供たちは具体的な設定で実際にを持ち、 "子供"はすべてプラグインを定義する必要はありません。現実には100以上のプロジェクトがあります。また、すべての依存バージョンとプラグインは1つの場所にのみ定義されています。バージョンのアップグレードで簡単に管理できます。 – Vadim

0

を助けてください。 親のPOMにを一度にと指定し、すべての子モジュールにそのバージョンを使用させることができます。 各子モジュールは依然としてその依存関係を列挙しなければなりません。

親POM:

<project> 
    ... 
    <dependencyManagement> 
     <dependencies> 
      <dependency> 
       <groupId>junit</groupId> 
       <artifactId>junit</artifactId> 
       <version>4.12</version> 
       <scope>test</scope> 
      </dependency> 
     ... 
     <dependencies> 
    </dependencyManagement> 
    ... 
</project> 

子のPOM:

<project> 
    ... 
    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
     </dependency> 
     ... 
    </dependencies> 
    ... 
</project> 
関連する問題