在类路径中查找重复的类

时间:2012-09-21 18:50:24

标签: java maven

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

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

7 个答案:

答案 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,JHadesjhades.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排除您不想要的罐子