在类路径中查找重复的类

我有一个使用Maven构建的Java应用程序,它有很多依赖项。 在执行我的测试用例时,它们有时会很好地通过,有时它们会因为一些不兼容的类组合而失败。 所以似乎在类路径中必须有两次随机获取的类。 一个很好,另一个没有。

  • 如何找出哪些类/ jar在我的类路径中不兼容?
  • 使用Maven的正确方法是什么,不要陷入兼容性陷阱?

我认为更好的解决方案是使用maven-duplicate-finder-plugin 。

注意:新版本是duplicate-finder-maven-plugin 。

您可以尝试使用此工具Tattletale 。

在eclipse中有一个插件可以检查构建路径中的重复类(ClasspathChecker http://classpathchecker.free.fr/

这是另一个简单的开源重复类路径查找器工具 – Classpath Inspector

这给出了类路径中重复类的相当不错的报告。

这个问题基本上是一个更普遍的问题的应用,“以某种方式扫描类路径(CP)并收集所有类文件和其他资源”,然后找到重复…

CP扫描有许多现有的库 (在所有环境中都可以做到这一点并不简单,特别是因为Java 9中的应用程序类加载器不再是URLClassLoader),特别是Classgraph,使用它来执行此操作相对简单 。

PS:对于Java版本<9, JHades ( jhades.github.io )很不错(但是Java 9/10/11上的NOK )。

您可以使用ClassGraph检测类路径或模块路径中的重复类文件定义(免责声明,我是ClassGraph的作者):

 for (Entry 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 } } 

您可以使用maven依赖关系:树来查看项目的maven层次结构和maven排除以排除您不想要的jar