在我们的项目中,我想删除运行时可能出现的所有潜在的jar冲突。我们的堆栈非常大,我们有不同的依赖项引入相同的jar。这是问题所在,每次依赖都会在新部署之后引入同一个jar的不同版本并导致问题。
我从哪里开始?有没有maven插件来解决这个问题? 任何有关这方面的帮助或指示都非常适合。
答案 0 :(得分:2)
您可以按如下方式使用maven-enforcer-plugin
:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.3.1</version>
<configuration>
<fail>true</fail>
<rules>
<dependencyConvergence/>
</rules>
</configuration>
<executions>
<execution>
<id>enforce-dependencies</id>
<goals>
<goal>enforce</goal>
</goals>
</execution>
</executions>
</plugin>
当存在冲突的依赖项时,这将停止构建。
答案 1 :(得分:1)
一个方便的工具:JHades。简而言之,它是一个有助于Jar依赖Hell的工具。除了JDK之外,它本身就是一个没有依赖关系的Jar。它可用于发现轻松冲突并调试更严重的问题。例如:
new JHades()
.printClassLoaders()
.printClasspath()
.overlappingJarsReport()
.multipleClassVersionsReport()
.findClassByName("org.jhades.SomeServiceImpl")
打印类加载器链,jar,重复类,...