2017-06-13 262 views
1

我有一個項目,2個模塊象下面這樣:行家重新包裝模塊來解決衝突的依賴

parent 
├── SDK module 
└── service module 

服務模塊依賴SDK模塊。 SDK模塊必須依賴於httpClient 3.x,但服務模塊必須依賴於httpClient 4.x.

我知道春天有一個重新包裝的cglib。所以我想重新打包httpClient 3.x到SDK模塊來解決這個問題。

任何人都知道如何做到這一點?(也許春天啓動:重新包裝?)

+0

您可以定義服務模塊HttpClient的4.X,但我認爲最終會導致服務模塊對SDK模塊具有依賴性,這不是沒有理由的,所以它使用SDK模塊的某些部分...所以問題是爲什麼不使用httpC lient 3.x在服務模塊?還是升級SDK模塊? – khmarbaise

+0

@khmarbaise前段時間,我將某人的SDK代碼導入到我的項目中。 SDK僅在httpClient 3.x中使用一些類。它浪費了大量的時間來拷貝源代碼來升級。所以我想找出一條適合未來的優雅之路。 – bluearrow

回答

0

理想的情況下,正在開發一個服務,我想避免衝突的依賴,儘可能。

如果這確實不在個人的手中,您可以在您的pom依賴聲明中使用<exclusions>以避免衝突版本。只是想,它周圍的樣品將是這樣的: -

SDKModule/pom.xml

<dependency> 
    <groupId>org.apache.httpcomponents</groupId> 
    <artifactId>httpclient</artifactId> 
    <version>3.1</version><!--just an example--> 
</dependency> 

ServiceModule/pom.xml

<dependency> 
    <groupId>some-group-id</groupId> 
    <artifactId>sdk-module</artifactId> 
    <version>some.version</version> 
    <exclusions> 
     <exclusion> 
      <groupId>org.apache.httpcomponents</groupId> 
      <artifactId>httpclient</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 
<!--This adds an exclusive version of httpclient not included via sdk-module--> 
<dependency> 
    <groupId>org.apache.httpcomponents</groupId> 
    <artifactId>httpclient</artifactId> 
    <version>4.5.3</version> 
</dependency> 
+0

maven auto在服務模塊中排除httpClient 3.x。但是會有運行時異常,因爲SDK模塊中的某些代碼只能在httpClient 3.x中找到類或方法。 – bluearrow