Java 在类路径中查找重复的类

Java 在类路径中查找重复的类,java,maven,Java,Maven,我有一个用Maven构建的Java应用程序,它有很多依赖项。在执行测试用例时,它们有时通过得很好,有时由于某些不兼容的类组合而失败。因此,似乎在类路径中必须有两个随机抽取的类。一个还好,另一个不行 如何找出类路径中哪些类/JAR不兼容 使用Maven避免落入兼容性陷阱的正确方法是什么 您可以尝试使用此工具。您可以使用maven dependency:树查看项目的maven层次结构和 要排除您不想要的jar,我认为更好的解决方案是使用 注意:新版本是。eclipse中有一个插件,用于检查构建路径

我有一个用Maven构建的Java应用程序,它有很多依赖项。在执行测试用例时,它们有时通过得很好,有时由于某些不兼容的类组合而失败。因此,似乎在类路径中必须有两个随机抽取的类。一个还好,另一个不行

  • 如何找出类路径中哪些类/JAR不兼容
  • 使用Maven避免落入兼容性陷阱的正确方法是什么

您可以尝试使用此工具。

您可以使用maven dependency:树查看项目的maven层次结构和
要排除您不想要的jar,我认为更好的解决方案是使用


注意:新版本是。

eclipse中有一个插件,用于检查构建路径中的重复类(ClasspathChecker)

这是另一个简单的开源重复类路径查找工具-


这在类路径中提供了相当不错的重复类报告

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

有(而且在所有环境中正确地执行此操作并不容易,特别是因为Java9中的应用程序类装入器不再是URLClassLoader),特别是


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

用于(输入dup:
新建ClassGraph().scan().getAllResources().ClassFileOnly().FindDuplicatePath()){
System.out.println(dup.getKey());//类文件路径
对于(资源res:dup.getValue()){
System.out.println(“->”+res.getURI());//资源URI,显示类路径元素
}
}

Maven怎么知道?OSGi就是答案……独立工具是一个不错的选择,我个人使用它作为一站式解决方案,因为它更容易与Maven集成。这对我来说很有吸引力!无设置,无编辑
pom.xml
,只需从命令行调用
mvn com.ning.maven.plugins:maven duplicate finder-plugin:1.0.4:check
。是否有与此插件等效的Gradle?仅供参考:最新版本的命令行是
mvn org.basepom.maven:duplicate finder-maven-plugin:1.4.0:check
@Renato无等效项存在。我准备了我自己的gradle插件,对它进行了扩展,但有显著的区别:1)只检查运行时类路径依赖项2)同时检查当前项目源文件该工具似乎已经失效,上一个版本是2012年2月17日,请参见:尽管该工具已经失效,但这提供了一个非常好的结果,提示:要使Tattletale在用Java8编译的jar上工作,例如,用更新的版本替换javassist.jar。此外,我找到的用于讨论目的的最佳报告称为“多个Jar文件”。它不显示任何类,只显示模块依赖项。是否有任何依赖项POM文件我应该导入以运行这段代码段
io.github.classgraph classgraph X.Y.Z
@SamBerchmans是的,Maven说明在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
    }
}