1

私はこのMavenhierachyを持っています:

sim-java
   ejb
   web
   log4j
   ...

ejb、web、log4jはsim-javaのモジュールであり、これらの各モジュールは親タグによってsim-javaを参照します。

log4jモジュールを作成し、それをsim-javaの依存関係として含めたいので、log4jはejbおよびwebモジュールの依存関係として存在します。

基本的に、sim-java内の私のpom.xmlにはこれが含まれています:

<dependencies>
    <dependency>
        <groupId>com.sim</groupId>
        <artifactId>log4j</artifactId>
        <version>${log4j.version}</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

(スコープは、earファイルにcom.sim:log4jを含むearモジュールがあるため提供されます)。

これで、log4jモジュール内のpom.xmlは次のようになります。

<dependencies>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
</dependencies>

このビルドエラーがあります:

30/10/12 18:56:07 CET:log4jのビルドエラー。org.apache.maven.lifecycle.LifecycleExecutionException:プロジェクトlog4jでの目標の実行に失敗しました:プロジェクトcom.sim:log4j:jar:0.0.1-の依存関係を解決できませんでしたスナップショット:アーティファクトcom.sim:log4j:jarが見つかりませんでした: 0.0.1-スナップショット

sim-javaは推移的な依存関係としてcom.sim.log4jを使用しているため、依存関係の問題があると思ったので、log4jpom.xml内でテストしました。

    <dependencies>
    <dependency>
        <groupId>com.sim</groupId>
        <artifactId>sim-java</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <exclusions>
            <exclusion>
                <groupId>com.sim</groupId>
                <artifactId>log4j</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
</dependencies>

30/10/12 18:59:22 CET:[警告] com.sim:log4j:jar:0.0.1-SNAPSHOTのPOMがありません。依存関係情報がありません。30/10/12 18:59:22 CET:欠落しているアーティファクトcom.sim:log4j:jar:0.0.1-SNAPSHOT:提供された30/10/12 18:59:22 CET:欠落しているアーティファクトcom.sim:log4j:jar:0.0.1-SNAPSHOT:提供された30/10 / 12 18:59:22 CET:アーティファクトがありませんcom.sim:log4j:jar:0.0.1-SNAPSHOT:提供

モジュール(ejb、webなど)内にcom.sim.log4jを含めることはおそらく機能しますが、sim-javaプロジェクトを介して推移的な依存関係を使用したいと思います。

これを行う方法を教えてください?

オリヴィエ

4

1 に答える 1

2

com.sim:log4j親pomに依存関係を持つことはできません。その依存関係は子に継承されます。つまりcom.sim:log4j、それ自体に依存します。

代わり<dependencyManagement/>に、親pomでを作成し、com.sim:log4jそれを必要とする子での使用を宣言します。ここではweb、とejbです。

親pom:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.sim</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

WebおよびEjbpom:

<dependencies>
    <dependency>
        <groupId>com.sim</groupId>
        <artifactId>log4j</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>

編集

ejbプロジェクトのlog4jモジュールにのみ依存関係を持たせることで、推移的な依存関係を維持できます。その場合、Webプロジェクトはejbプロジェクトに依存し、log4jは推移的な依存関係になります。

于 2012-10-30T18:44:36.853 に答える