2016-11-07 66 views
1

比方說,我有這對B.編譯依賴於爲jar的編譯依賴。此外,我的測試中有B.Maven的:測試與傳遞編譯

的依賴。當我宣佈一個「測試」的依賴在B上,這似乎覆蓋了B上的傳遞式編譯依賴關係,所以我不能編譯我的項目了。如果我忽略B,一切都可以工作,但是它感覺很奇怪,因爲我直接使用傳遞依賴。

什麼是「Maven-like」解決方案?

例:

如果我只有

<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 

所以共享記錄改變了它的範圍,不提供任何更多的編譯。編輯2:如果我使用src/main/java中commons-logging的任何內容,那麼第一個版本編譯時,第二個版本不編譯。額外的測試依賴性「隱藏」傳遞式編譯依賴性。

+0

...你描述的問題不是我有的問題。這將有助於看到一些來自poms – Gimby

+0

的相關位,我將嘗試構建一個最小示例。你是否知道規定哪個範圍將「贏」,如果幾個範圍直接和傳遞? –

+0

您正在描述一個可能不存在的問題,但由於其他問題而只能以這種方式出現。測試範圍與常規編譯範圍/依賴關係無關。 – Gimby

回答

-1

還沒有遇到過這種情況,但是如果我理解了您的問題,那麼測試所需的依賴項B的版本和依賴項A所需的依賴項B的版本會有所不同。如果版本相同,那麼你就不會面臨這個問題。

在這種情況下,您可以使用Maven提供的Dependency Scope功能。讓依賴項A獲得它所需版本的依賴關係B,並在範圍test中聲明一個單獨的依賴關係B.這意味着它的使用將僅限於測試。你可以知道更多here

+0

我經歷了發佈ananswer之後發佈的依賴關係樹。我明白我的回答並不能解決@JF Meier所面臨的問題,但應該給出理由或討論應該發生,而不是直接投票給某人的回答,這僅僅是令人沮喪的。 –