32

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

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

7 回答 7

51

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

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

于 2012-09-22T17:55:24.977 回答
16

您可以尝试使用此工具Tattletale

于 2012-09-21T18:54:49.197 回答
3

您可以使用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
    }
}
于 2018-10-04T04:35:34.733 回答
2

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

于 2014-05-29T11:10:29.293 回答
2

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

许多用于 CP 扫描的现有库(在所有环境中正确执行此操作并非易事,特别是因为 Java 9 中的应用程序类加载器不再是 URLClassLoader),尤其是Classgraph,使用它执行此操作相对简单.

PS:对于 <9 的 Java 版本,JHades ( jhades.github.io ) 很好(但在 Java 9/10/11 上没有问题)。

于 2018-10-04T01:49:25.463 回答
1

这是另一个简单的开源 Duplicate Classpath Finder 工具 - Classpath Inspector

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

于 2015-03-26T20:42:22.900 回答
-3

您可以使用 maven dependency:tree 查看项目的 maven 层次结构,并使用 maven exclude 排除您不想要的 jar

于 2012-09-21T19:12:03.477 回答