在类路径中查找重复的类

mib*_*tec 26 java maven

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

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

khm*_*ise 41

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

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

  • 这对我来说就像一个魅力!没有设置,没有编辑`pom.xml`,只需从命令行调用`mvn com.ning.maven.plugins:maven-duplicate-finder-plugin:1.0.4:check`. (13认同)
  • Gradle是否与此插件等效? (4认同)
  • 最新版本的命令行是`mvn org.basepom.maven:duplicate-finder-maven-plugin:1.4.0:check` (4认同)
  • 仅供参考,这里有类似的东西:http://www.mojohaus.org/extra-enforcer-rules/banDuplicateClasses.html (2认同)

Jag*_*ger 16

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

  • 该工具似乎已经死了,最后一个版本发布于2012年2月17日,请参阅:https://issues.jboss.org/browse/TTALE/fixforversion/12318287 (3认同)

Luk*_*son 6

您可以使用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
    }
}
Run Code Online (Sandbox Code Playgroud)