2016-11-07 8 views
1

のは、私はさらにBにコンパイル依存性を有するジャーAにコンパイル依存性を持っているとしましょうコンパイルし、私のテストはB.Mavenの:私は「テスト」依存関係を宣言すると、テスト対推移

に依存していますこれはBの推移的なコンパイル依存関係を上書きしてしまうので、私はもうプロジェクトをコンパイルできません。私がBを省略すると、すべてが機能しますが、推移的な依存関係を直接使用するため、奇妙に感じます。

このための "Mavenのような"ソリューションは何でしょうか?

例:

私はその後、

<dependency> 
    <groupId>commons-httpclient</groupId> 
    <artifactId>commons-httpclient</artifactId> 
    <version>3.1</version> 
</dependency> 

私の依存関係を持っている場合は、次のリストは次のとおりです。

commons-codec:commons-codec:jar:1.2:compile 
commons-httpclient:commons-httpclient:jar:3.1:compile 
commons-logging:commons-logging:jar:1.0.4:compile 

ツリーは次のとおりです。

 --- maven-dependency-plugin:2.8:tree (default-cli) @ testcompile --- 
     de.continentale.spu:testcompile:jar:0.0.1-SNAPSHOT 
     \- commons-httpclient:commons-httpclient:jar:3.1:compile 
     +- commons-logging:commons-logging:jar:1.0.4:compile 
     \- commons-codec:commons-codec:jar:1.2:compile 

私は

を使用している場合
<dependency> 
    <groupId>commons-httpclient</groupId> 
    <artifactId>commons-httpclient</artifactId> 
    <version>3.1</version> 
</dependency> 
<dependency> 
    <groupId>commons-logging</groupId> 
    <artifactId>commons-logging</artifactId> 
    <version>1.0.4</version> 
    <scope>test</scope> 
</dependency> 

それから私は、依存関係を取得:リスト

commons-codec:commons-codec:jar:1.2:compile 
commons-httpclient:commons-httpclient:jar:3.1:compile 
commons-logging:commons-logging:jar:1.0.4:test 

は木がある:

--- maven-dependency-plugin:2.8:tree (default-cli) @ testcompile --- 
de.continentale.spu:testcompile:jar:0.0.1-SNAPSHOT 
+- commons-httpclient:commons-httpclient:jar:3.1:compile 
| \- commons-codec:commons-codec:jar:1.2:compile 
\- commons-logging:commons-logging:jar:1.0.4:test 

のでコモンズ・ロギングは、その範囲を変更し、任意のより多くのコンパイルには使用できません。

EDIT2:src/main/javaでcommons-loggingから何かを使用すると、最初のバージョンはコンパイルされず、2番目のバージョンはコンパイルされません。追加のテスト依存関係は、推移的なコンパイル依存関係を「隠す」。

+0

...私が持っている問題はあなたの問題ではありません。それはおやすみからのいくつかの関連するビットを表示するのに役立ちます – Gimby

+0

私は最小限の例を構築しようとします。いくつかのスコープが直接的かつ過渡的に見つかった場合、どのスコープが "勝つ"かを規定するルールを知っていますか? –

+0

あなたは存在しない可能性がある問題を記述していますが、他の問題があるためにそのようにしか見えません。テストスコープは、通常のコンパイルスコープ/依存関係とは関係ありません。 – Gimby

答えて

-1

このような状況に遭遇したことはありませんが、テストで必要とされている依存性Bのバージョンであり、依存性Aで必要とされる問題を理解していれば違います。バージョンが同じであれば、この問題に直面することはありません。

この場合、Mavenが提供するDependency Scope機能を使用できます。依存関係Aは、必要なバージョンの依存関係Bを取得し、スコープtestを使用して、独立した依存関係Bをpomに宣言します。つまり、その使用はテストだけに制限されます。あなたはもっと知ることができますhere

+0

私は回答を投稿した後に投稿された依存関係のツリーを調べました。自分の答えが@JFマイヤーが直面している問題を解決することはできないと理解しましたが、単純に落胆している人の答えを直接投票するのではなく、その理由が与えられるべきです。 –

関連する問題