簡體   English   中英

我可以強制maven依賴項A使用特定版本的依賴項B,同時使用其他版本的依賴項B嗎?

[英]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項目,可以將它們稱為masteraux 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找到的類,而masterhttpclient的依賴項不向前兼容,因此無論我排除哪個版本,REST調用都在預期的位置失敗。

有沒有辦法要求aux使用較新的依賴關系,而要求master使用較舊的依賴關系?

我知道我可以通過修補auxmaster來使它們能夠使用相同的依賴關系來調和,但這遠非理想。

您不能同時在類路徑上具有相同庫/類的多個版本。 您將必須將'master'和'aux'分離到單獨的jar中,嵌入所需的httpclient版本,並使用自己的類加載器加載每個jar。

有一個叫做OSGi的框架可以做到這一點。 對於您的應用程序來說,這可能是過高的選擇,但是如果您想開始,可以看看OSGi enRoute

您可以編寫一個自定義的類加載器來加載指定版本的類,因為默認的類加載器只會在它可以找到的類路徑上選擇第一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM