[英]Can I force a maven dependency A to use a specific version of a dependency B, whilst using a different version of dependency B along-side it?
我有兩個Maven項目,可以將它們稱為master
和aux
。 Master
依賴於aux
,也依賴於org.apache.httpcomponents.httpclient
的特定版本。 Aux
依賴於更高版本的org.apache.httpcomponents.httpclient
。
例如
<project...>
<artifactId>master</artifactId>
<groupId>com.my-company</groupId>
<dependencies>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>earlier version</version>
</dependency>
<!--<uses later version of http client>-->
<dependency>
<groupId>com.my-company</groupId>
<artifactId>aux</artifactId>
</dependency>
...
</dependencies>
...
</project>
但是, aux
依賴於僅在較新版本的httpclient
找到的類,而master
對httpclient
的依賴項不向前兼容,因此無論我排除哪個版本,REST調用都在預期的位置失敗。
有沒有辦法要求aux
使用較新的依賴關系,而要求master
使用較舊的依賴關系?
我知道我可以通過修補aux
和master
來使它們能夠使用相同的依賴關系來調和,但這遠非理想。
您不能同時在類路徑上具有相同庫/類的多個版本。 您將必須將'master'和'aux'分離到單獨的jar中,嵌入所需的httpclient
版本,並使用自己的類加載器加載每個jar。
有一個叫做OSGi的框架可以做到這一點。 對於您的應用程序來說,這可能是過高的選擇,但是如果您想開始,可以看看OSGi enRoute 。
您可以編寫一個自定義的類加載器來加載指定版本的類,因為默認的類加載器只會在它可以找到的類路徑上選擇第一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.