我在這裏有一點依賴性地獄的情況,我想解決:我有三個項目,A,B和C.A和B都依賴C.現在A是我自己的模塊,我有直接控制以上,B是我使用的一個庫,C是使用兩個直接從我模塊A和我的依賴性B.我可以通過本地存儲庫覆蓋Maven依賴項版本嗎?
爲直觀起見庫:
C
^
/B
| ^
\/
A
由於種種原因,我現在需要對本地需要的C進行一些小改動,但不希望(或不能)將其部署到正常下載C的全局存儲庫。
我試圖通過標記我裝在我與分類本地資源庫的C修改後的版本,改變依賴於它在A的POM要做到這一點,包括像這樣的分類:
<dependency>
<groupId>foo</groupId>
<artifactId>C</artifactId>
<version>0.7.16</version>
<classifier>myclassifier</classifier>
</dependency>
但mvn dependency:tree
現在表明我在類路徑中有因爲傳遞依賴的既與分類版本和版本沒有它:
[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ A ---
[INFO] org.example:A:jar:0.1-SNAPSHOT
...
[INFO] +- foo:C:jar:myclassifier:0.7.16:compile
[INFO] +- bar:B:jar:3.2.5:compile
[INFO] | +- foo:C:jar:0.7.16:compile
有什麼辦法,我可以強迫我的項目/ Maven來就用我的修改後的版本在此背景?
編輯:解
現在,我一直在使用它像這樣在排除一個的pom.xml這要歸功於菲利普和Samuel答案解決。
<dependency>
<groupId>foo</groupId>
<artifactId>C</artifactId>
<version>0.7.16</version>
<classifier>myclassifier</classifier>
</dependency>
<dependency>
<groupId>bar</groupId>
<artifactId>B</artifactId>
<version>3.2.5</version>
<exclusions>
<exclusion>
<groupId>foo</groupId>
<artifactId>C</artifactId>
</exclusion>
<exclusions>
</dependency>
注:當然,這僅僅只要在C編輯真的是輕微的,不改變被B所使用的API,這對我來說是這樣的作品。
是的,我只需要C2(這是與C兼容的API/ABI)。我沒有想到排除,這使得它非常容易,非常感謝! – David 2013-03-06 12:12:54