15

親 pom プロジェクトを正しく使用する方法を理解しているかどうかはわかりません。次の親 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>

次に、子 pom が親を参照します (各子には、表示されていない独自の依存関係のセットがあります)。

<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、またはそれらの依存関係はありません。

それ自体はjarではなく、他のjarへの参照のみを持つ「マスター」pomプロジェクトを作成し、その「マスター」をどこかで参照できるようにする方法が必要だと私は考え続けていますが、これがどのように行われるかわかりません達成されます。

4

3 に答える 3

15

プロジェクトの構造を変更することを最初に提案します。

--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 ファイル) を作成しないためです。

更新:スコープimport を持つdependencyManagement領域に対してのみ限定的な方法でこれを行うことができますが、これは依存関係ではなくdepdencyManagementでの使用のみを目的としています。別の解決策は、依存関係を持つ別のダミー プロジェクトを作成し、推移的な deps として 2 つの子を作成することです。しかし、これは本当の美しさではありません。

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

于 2013-10-16T06:08:59.160 に答える
0

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

各子モジュールを依存関係として追加し、親 pom を追加することで目的を達成できるはずです。

于 2013-10-16T07:26:56.223 に答える
0

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

于 2013-10-16T05:54:21.433 に答える