我有一个用 Maven 构建的 Java 应用程序,它有很多依赖项。在执行我的测试用例时,它们有时会通过,有时会因为一些不兼容的类组合而失败。因此,在类路径中似乎必须有一些类是随机抽取的。一个很好,另一个不行。
- 如何找出我的类路径中哪些类/jar 不兼容?
- 使用 Maven 不落入兼容性陷阱的正确方法是什么?
我认为更好的解决方案是使用maven-duplicate-finder-plugin。
注意:新版本是duplicate-finder-maven-plugin。
您可以尝试使用此工具Tattletale。
您可以使用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.getURI()); // Resource URI, showing classpath element
}
}
eclipse中有一个插件可以检查构建路径中的重复类(ClasspathChecker http://classpathchecker.free.fr/)
这个问题基本上是更一般的问题的应用程序“以某种方式扫描类路径(CP)并收集所有类文件和其他资源”,然后在其中找到重复项......
有许多用于 CP 扫描的现有库(在所有环境中正确执行此操作并非易事,特别是因为 Java 9 中的应用程序类加载器不再是 URLClassLoader),尤其是Classgraph,使用它执行此操作相对简单.
PS:对于 <9 的 Java 版本,JHades ( jhades.github.io ) 很好(但在 Java 9/10/11 上没有问题)。
这是另一个简单的开源 Duplicate Classpath Finder 工具 - Classpath Inspector
这给出了类路径中重复类的相当不错的报告。
您可以使用 maven dependency:tree 查看项目的 maven 层次结构,并使用 maven exclude 排除您不想要的 jar