我有一个使用Maven构建的Java应用程序,它有很多依赖项。在执行我的测试用例时,它们有时会很好地通过,有时它们会因为一些不兼容的类组合而失败。所以似乎在类路径中必须有两次随机获取的类。一个很好,另一个没有。
答案 0 :(得分:39)
我认为更好的解决方案是使用maven-duplicate-finder-plugin。
注意:新版本为duplicate-finder-maven-plugin。
答案 1 :(得分:16)
您可以尝试使用此工具Tattletale。
答案 2 :(得分:1)
在eclipse中有一个插件可以检查构建路径中的重复类(ClasspathChecker http://classpathchecker.free.fr/)
答案 3 :(得分:1)
这是另一个简单的开源重复类路径查找器工具 - Classpath Inspector
它给出了类路径中重复类的相当不错的报告。
答案 4 :(得分:1)
从本质上讲,此问题是更普遍的问题的应用:“以某种方式扫描类路径(CP)并收集所有类文件和其他资源,然后在其中查找重复项...
有a number of existing libraries for CP scanning(在所有环境中正确执行此操作并不容易,尤其是因为Java 9中的应用程序类加载器不再是URLClassLoader),尤其是Classgraph, using which it's relatively trivial to do this。
PS:对于Java版本<9,JHades(jhades.github.io)不错(但NOK on Java 9/10/11)。
答案 5 :(得分:1)
您可以使用ClassGraph在类路径或模块路径中检测重复的类文件定义(免责声明,我是ClassGraph的作者):
for (Entry<String, ResourceList> dup :
new ClassGraph().scan().getAllResources().classFilesOnly().findDuplicatePaths()) {
System.out.println(dup.getKey()); // Classfile path
for (Resource res : dup.getValue()) {
System.out.println(" -> " + res.getURL()); // Resource URL, showing classpath element
}
}
答案 6 :(得分:-2)
您可以使用maven依赖关系:树来查看项目的maven层次结构 maven exclusion排除您不想要的罐子