2017-06-13 266 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