2013-10-16 28 views
11

親pomプロジェクトを正しく使用する方法を理解しているかどうかはわかりません。私は、次の親ポンポン定義されている:Maven:親pomプロジェクトへの参照を追加する

<modelVersion>4.0.0</modelVersion> 
<groupId>com.example</groupId> 
<artifactId>parent</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>pom</packaging> 

<modules> 
    <module>../child1</module> 
    <module>../child2</module> 
</modules> 

をそして子供ポンポン参照親(それぞれの子が示されていない依存関係の独自のセットを持っている):

<parent> 
    <groupId>com.example</groupId> 
    <artifactId>parent</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <relativePath>../Parent/pom.xml</relativePath> 
</parent> 

<modelVersion>4.0.0</modelVersion> 
<artifactId>child1</artifactId> 

は、このセットアップは正常に動作し、 eclipse(m2eclipse)で正しく解決されます。私は自分のローカルリポジトリにこれらを展開し、正しいはず次の構造、で終わることができます(

--com 
    --example 
     --parent 
     --0.0.1-SNAPSHOT 
      --parent-0.0.1-SNAPSHOT.pom 
     --child1 
     --0.0.1-SNAPSHOT 
      --child1-0.0.1-SNAPSHOT.jar 
      --child1-0.0.1-SNAPSHOT.pom 
     --child2 
     --0.0.1-SNAPSHOT 
      --child2-0.0.1-SNAPSHOT.jar 
      --child2-0.0.1-SNAPSHOT.pom 

私の問題は、私が今異なるプロジェクトにプロジェクトを参照したいということではありませんparent、child1、またはchild2)、親のすべての子をプルします。

<dependencies> 
    <dependency> 
     <groupId>com.example</groupId> 
     <artifactId>parent</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <type>pom</type> 
    </dependency> 
</dependencies> 

がこのプロジェクトを行うときEclipseでエラーが表示されないが、何の成果物は、私のクラスパスに追加されませんされています:私は私の他のプロジェクトで、それへの参照を追加することができ、CHILD1ないchild2の、またはその依存関係のいずれか。

"master" pomプロジェクトはjarファイルではなく、他のjarファイルへの参照のみを持ち、その "master"をどこかで参照することができると思っていますが、これがどのように達成されているかを調べる。

答えて

0

同じパッケージタイプのスーパーPOMを作成し、現在の親を依存関係として追加してみてください。

11

まず、プロジェクトの構造を変更することをお勧めします。

--com 
    --example 
     --parent 
     --0.0.1-SNAPSHOT 
      --parent-0.0.1-SNAPSHOT.pom 
     --child1 
     --0.0.1-SNAPSHOT 
      --child1-0.0.1-SNAPSHOT.jar 
      --child1-0.0.1-SNAPSHOT.pom 
     --child2 
     --0.0.1-SNAPSHOT 
      --child2-0.0.1-SNAPSHOT.jar 
      --child2-0.0.1-SNAPSHOT.pom 

私は、次の道を行くことをお勧めします:

--parent (pom.xml) 
     +--child1 
     +--child2 

親はマスターに、またはトランクにいずれかのバージョン管理(Gitは、SVN)の中に、チェックインすることができます。別にすべてのチャイルズは、このような親を参照する必要があることから:

<modelVersion>4.0.0</modelVersion> 

<parent> 
    <groupId>com.example</groupId> 
    <artifactId>parent</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
</parent> 

<artifactId>child1</artifactId> 

とあなたの親にあなたはこのようなものを使用することができます。

<groupId>com.example</groupId> 
<artifactId>parent</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>pom</packaging> 

<modules> 
    <module>child1</module> 
    <module>child2</module> 
</modules> 

さらにあなたは、単に追加することによって、会社のPOMを使用することができますプロジェクトの親に親参照:会社で

<parent> 
    <groupId>com.example</groupId> 
    <artifactId>master-pom</artifactId> 
    <version>0.0.1</version> 
</parent> 

<groupId>com.example</groupId> 
<artifactId>parent</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>pom</packaging> 

<modules> 
    <module>child1</module> 
    <module>child2</module> 
</modules> 

はPOMすることができます(とすべきである)ピン異なるプラグインのバージョンとと依存関係のため、会社のデフォルトや提案を定義します適切なバージョン。

あなたが会社のスーパーポームを持つのが好きなら、プラグインや依存関係などの設定を含むpomファイルのみを含む別個のmavenプロジェクトを簡単に作成できます。もちろん、バージョンコントロール(Git、SVNなど)にチェックしてください。 )。他のプロジェクトとは別に

jarファイルを参照する場合、つまり、マルチモジュールビルドのアーティファクトを意味する場合は、正しいgroupId、artifactIdおよびversionを使用する必要があります。あなたは以下を与える必要があり、他のプロジェクトのchild1を使用したい場合:

<dependencies> 
    <dependency> 
     <groupId>com.example</groupId> 
     <artifactId>child1</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
    </dependency> 
</dependencies> 

マルチモジュールのビルドの親が通常使用される、原因に基づいているアーティファクトではないことを理解することが重要ですパッケージタイプpom実際にアーティファクト(jarファイル)は作成されません。

更新: あなたはscope importでのみdependencyManagement領域の限られた方法ではなく、これが唯一の依存関係のためdepdencyManagementに使用していないために意図されていることを行うことができます。 他の解決策は、従属性が過渡的なdepsとして2つの子をもたない別個のダミープロジェクトを作成することかもしれません。しかし、これは本当に美しさではありません。

解決策は、プロジェクト内で使用している2つ以上の依存関係を直接追加するだけです。それだけです。

+2

あなたの最後の2つの段落は、私がどのように私は親のポンを使用することができないと思うと思う。私は共通の依存関係を使用していますが、その中のすべての子モジュールで共有されていますが、私は本当に依存しないが関連する "子"を引き出す他のプロジェクトに追加できる単一の依存関係が必要です。 _child1_と_child2_の両方を取得する単一の依存関係を追加したいと思います。 – trebor

+0

@trebor親POMはそうではありません。メタプロジェクトを作成するには、 'common-libraries'のような名前の通常のMavenプロジェクトを作成し、他のすべてのプロジェクトを依存関係として参照します。親POMは、1つのステップで複数のライブラリを構築し、正しい構築順序を自動的に使用することです。 –

0

@khmarbaiseが指摘したように、マルチモジュールビルドの親は、通常、他の場所の依存関係としては使用されません。

それぞれの子モジュールを依存関係として追加し、親のpomを追加することで、実行したいことを達成できるはずです。

+0

それは私が親のpomで達成しようとしていることです...他の関連しているが依存していない成果物を引き出すことができる単一の依存性が欲しいです。つまり、_child1_と_child2_の両方を別々のプロジェクトに入れたいのですが、両方を依存関係として定義する必要はありません。 – trebor

+1

Mavenには存在しないインクルードファイルの種類を定義しようとしています。使用しているすべての依存関係を明示的に宣言する必要があります。一方、依存関係管理パートは、より大きい組織で使用されるバージョンの依存関係を提案として定義することを意図しています。しかし、あなたが本当に依存関係を使いたいのであれば、それをあなたのプロジェクトのポーム(バージョンを除く)に書き込まなければなりません。 – khmarbaise

関連する問題