1

次の問題があります-apache commons-lang version 2.6プロジェクト(pom.xmlで定義されています)で使用しようとしていますが、推移的な依存関係のため、Mavenは常にバージョン3.2.1を追加してビルドを中断します。これがpom.xmlの関連部分です

<properties>
   <commons-lang.version>2.6</commons-lang.version>
</properties>
<dependency>
   <groupId>commons-lang</groupId>
   <artifactId>commons-lang</artifactId>
   <version>${commons-lang.version}</version>
</dependency>

実行しようとするとmvn dependency:tree、その理由が推移的な依存関係であることがわかります。

+- org.seleniumhq.selenium:selenium-api:jar:2.26.0:compile (version managed from 2.26.0)
    +- net.sourceforge.htmlunit:htmlunit:jar:2.10:compile
       +- org.apache.commons:commons-lang3:jar:3.1:compile

だから私は問題を見ることができますが、それを修正する方法が本当にわかりません。提案をありがとう:-)

4

3 に答える 3

4

問題の原因となっている依存関係内で除外タグを使用することを検討してください。除外タグは、Mavenに間接的な依存関係を持たせたくないことをMavenに通知し、この状況でのみ使用されます。

たとえば、依存関係Aの1つがバージョン1.0のBをもたらしたが、代わりにバージョン2.0のBを使用したい場合は、次のようにすることができます。

<dependency>
    <groupId>org.mycorp</groupId>
    <artifactID>A</artifactID>
    <version>4.0</version>
    <exclusions>
        <exclusion>
            <groupId>org.mycorp</groupId>
            <artifactId>B</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.mycorp</groupId>
    <artifactID>B</artifactID>
    <version>2.0</version>
</dependency>

この場合、除外タグは間接的な依存関係(B 1.0)をもたらさないことを示しています。バージョンを指定する必要はないことに注意してください。そのバージョンのBを自動的に導入しないようにMavenに指示したら、必要なBのバージョン(この場合はバージョン2.0)を定義する明示的な依存関係に従います。

于 2012-12-20T15:10:36.497 に答える
3

Commons Lang3はLang2とは異なるパッケージ命名を使用するため、この特定の依存関係によってビルドが破損することはありません。コードはLang2のクラスを使用する必要がありますが、HTMLUnitはLang3のクラスを使用し、両方のJARが共存できます。

おそらく、ビルド出力からの関連する抜粋を使用して、これがビルドをどのように壊すと思うかを説明する必要があります。

于 2012-12-20T15:29:53.663 に答える
0

私の同僚は、親pomのdependencyManagementでバージョンを宣言するのを忘れていたので、それでした。ご提案ありがとうございます!

于 2013-01-18T13:04:00.030 に答える