use*_*736 14 java dependencies overlap maven
我想使用Maven-shade-plugin创建超级jar.但是当我调用mvn package命令Maven报告时,有一些重叠的类.我附加了所有有问题的重叠,其中一些是由于库(Log4J)的旧版本和新版本引起的,但其中一些似乎具有相同的类 - 例如javax.mail和mailapi/smtp/imap等等.
在这种情况下最好做什么?是否有一些关键如何确定哪些重叠是安全的,忽略哪一个需要正确?
- mailapi-1.4.3.jar, javax.mail-1.5.0.jar define 166 overlappping classes
- spring-2.5.6.SEC03.jar, spring-tx-3.1.4.RELEASE.jar define 176 overlappping classes:
- spring-beans-3.1.4.RELEASE.jar, spring-2.5.6.SEC03.jar define 283 overlappping classes:
- slf4j-log4j12-1.7.5.jar, slf4j-impl-2.0-beta2.jar define 3 overlappping classes:
- spring-2.5.6.SEC03.jar, spring-context-support-3.1.4.RELEASE.jar define 55 overlappping classes:
- aopalliance-1.0.jar, spring-2.5.6.SEC03.jar define 9 overlappping classes:
- imap-1.5.0.jar, javax.mail-1.5.0.jar define 87 overlappping classes:
- commons-logging-api-1.1.jar, commons-logging-1.1.3.jar define 19 overlappping classes:
- spring-2.5.6.SEC03.jar, spring-core-3.1.4.RELEASE.jar define 161 overlappping classes:
- spring-2.5.6.SEC03.jar, spring-context-3.1.4.RELEASE.jar define 326 overlappping classes:
- log4j12-api-2.0-beta3.jar, log4j-1.2.17.jar define 23 overlappping classes:
- spring-aop-3.1.4.RELEASE.jar, spring-2.5.6.SEC03.jar define 237 overlappping classes:
- spring-jdbc-3.1.4.RELEASE.jar, spring-2.5.6.SEC03.jar define 239 overlappping classes:
- quartz-1.8.6.jar, quartz-jobs-2.2.1.jar define 15 overlappping classes:
- smtp-1.5.0.jar, javax.mail-1.5.0.jar define 17 overlappping classes:
- spring-asm-3.1.4.RELEASE.jar, spring-2.5.6.SEC03.jar define 31 overlappping classes:
Run Code Online (Sandbox Code Playgroud)
编辑:这个应用程序"A"用作Maven依赖我另一个Java应用程序 - 我将这个应用程序称为"B".这个B应用程序使用javax.mail ver 1.5.1.该库也使用第一个应用程序.但是当我调用mvn package命令时,Maven注意到了javax.mail-api-1.5.1.jar, javax.mail-1.5.1.jar define 135 overlappping classes.
是这个问题,如果是这样,如何解决它还是可以忽略它?
首先要做的是尽可能多地删除重叠类的明显原因.例如:
您不太可能需要在阴影jar中保留类的冲突版本.如果你这样做,那么shade插件也允许重新定位类,如http://maven.apache.org/plugins/maven-shade-plugin/examples/class-relocation.html所述.
小智 6
我发现maven 依赖树插件非常有用,可以找出嵌套依赖的来源,然后为它添加排除项。
$ **mvn dependency:tree -Dverbose -Dincludes=aopalliance**
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building petshop cli 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ cli ---
[INFO] com.sample.petshop:cli:jar:1.0
[INFO] \- **org.springframework:spring-context**:jar:4.1.3.RELEASE:compile
[INFO] \- org.springframework:spring-aop:jar:4.1.3.RELEASE:compile
[INFO] \- **aopalliance:aopalliance**:jar:1.0:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.865s
[INFO] Finished at: Fri May 08 15:12:01 IST 2015
[INFO] Final Memory: 14M/223M
[INFO] ------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
aopalliance jar 是从 spring-context-support 引用的,这表明我们可以排除它。
| 归档时间: |
|
| 查看次数: |
17329 次 |
| 最近记录: |