mavendependency的版本冲突问题
在改造⼀个旧项⽬中,遇到各种问题。
旧项⽬有⼗多个模块,因为没有⼀个统⼀的⽗pom,它们对第三⽅的jar的版本没有统⼀。虽然也存在公共的依赖模块,⽐如commons、util,但是,我们的模块中,有时候⼜会⾃⼰重复引⽤⼀些基础的、已经在公共依赖模块存在的对三⽅jar,这样就造成了很多的冲突。
当我考虑统⼀到⼀个⽗pom⾥⾯去的时候,发现了很多问题。
1
[ERROR]
3.6.10.Final.是什么东东,发现是⼦模块中写死的⼀个 property,虽然没有在 dependency中使⽤它,但是它却⽣效了,真是神奇了。⼤概是它
把 spring-boot 的同名的 property 覆盖了吧,但是 spring-boot 的当前版本依赖的netty 并不是 3.6.10.Final.,所以就出现了这个问题。
怎么解决:把3.6.10.Final. 的property 删除掉就好了。不过呢,“SNAPSHOT does not allow version” 是啥?搞不懂
同上的原因。
2
[WARNING] Found duplicate and different resources in [org.springframework.data:spring-data-commons:1.13.17.RELEASE,
org.springframework.data:spring-data-keyvalue:1.2.17.RELEASE, org.springframework.data:spring-data-redis:1.8.17.RELEASE]: [WARNING]
...
[WARNING] Found duplicate classes/resources in test classpath.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 14.474 s
[INFO] Finished at: 2019-02-22T15:19:00+08:00
[INFO] Final Memory: 44M/418M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.basepom.maven:duplicate-finder-maven-plugin:1.2.1:check (duplicate-dependencies) on project mint: Found duplicate classes/resources! -> [Help 1]
⼀个 竟然引起了duplicate classes/resources问题,⽽且导致了编译错误。没有办法,只有把相关的重复的jar 依赖去掉。去掉就好了。
经过仔细查,发现 spring-boot-starters-1.5.18 依赖了duplicate-finder-maven-plugin:
C:\Users\rx63\.m2\repository\org\springframework\boot\spring-boot-starters\1.5.18.RELEASE\spring-boot-starters-1.5.18.RELEASE.pom
<plugin>
<groupId>org.basepom.maven</groupId>
<artifactId>duplicate-finder-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<id>duplicate-dependencies</id>
<phase>validate</phase>
<goals>
<goal>check</goal>
</goals>spring framework版本
<configuration>
<failBuildInCaseOfConflict>true</failBuildInCaseOfConflict>
</configuration>
</execution>
</executions>
</plugin>
3
还遇到各种神奇问题,format 也有问题。
[ERROR] Failed to execute goal io.spring.javaformat:spring-javaformat-maven-plugin:0.0.6:validate (default) on project wisteria-api: Formatting violations found in the following files:
[ERROR] * F:\dev\SVN\code\wisteria\wisteria-api\src\main\java\com\wisdom\wisteria\constants\search\TradeSearch.java
[ERROR] * F:\dev\SVN\code\wisteria\wisteria-api\src\main\java\com\wisdom\wisteria\trade\service\AccountTradeService.java
[ERROR]
[ERROR] Run `spring-javaformat:apply` to fix.
[ERROR] -> [Help 1]
经过仔细查,发现spring-boot-parent-1.5.18 依赖了spring-javaformat-maven-plugin:
C:/Users/rx63/.m2/repository/org/springframework/boot/spring-boot-parent/1.5.18.RELEASE/spring-boot-parent-1.5.18.RELEASE.pom
<plugin>
<groupId>io.spring.javaformat</groupId>
<artifactId>spring-javaformat-maven-plugin</artifactId>
<version>${spring-javaformat.version}</version>
<executions>
<execution>
<phase>validate</phase>
<configuration>
<skip>${disable.checks}</skip>
</configuration>
<goals>
<goal>validate</goal>
</goals>
</execution>
</executions>
</plugin>
按照提⽰,执⾏下⾯的命令就好了:
mvn spring-javaformat:apply
javaformat这个插件真是烦⼈,只能接受tab作为缩进,4个空格等是不能通过validate的(我尝试通过IDEA对代码进⾏reformat,结果,这样的代码竟然都不能通过),
后⾯⼜做了对⽐,发现 spring-boot-1.5.18 这个版本真是奇葩,只有它是有duplicate-finder、 spring-javaformat 这些功能,其他的版本都没有的!!
4
[INFO] --- maven-enforcer-plugin:1.4.1:enforce (enforce-rules) @ cactus-provider ---
[WARNING] Rule 0: org.apache.forcer.BannedDependencies failed with message:
Found Banned Dependency: commons-logging:commons-logging:jar:1.1.1
Use 'mvn dependency:tree' to locate the source of the banned dependencies.
[WARNING] Found duplicate (but equal) classes in [at.embed:tomcat-embed-core:8.5.35, at:tomcat-juli:8.5.35]: commons-logging:commons-logging:jar:1.1.1  被Banned 了??不是很好理解,暂时把commons-logging 依赖去掉吧,纳⼊exclusion 之后就好了!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。