用Gradle检测类路径中的冲突类

用Gradle检测类路径中的冲突类,gradle,Gradle,我无意中发现我的项目包括com.sun.xml.txw2.output.IndentingXMLStreamWriter两次: 通过com.sun.xml.bind:jaxb-core:2.3.0.1 通过org.glassfish.jaxb:txw2:2.3.2 com.sun.xml.bind:jaxb-core声明为原始依赖项,org.glassfish.jaxb:txw2作为com.sun.xml.ws:rt的可传递依赖项。作为解决方案,我应该删除com.sun.xml.bind:j

我无意中发现我的项目包括
com.sun.xml.txw2.output.IndentingXMLStreamWriter
两次:

  • 通过
    com.sun.xml.bind:jaxb-core:2.3.0.1
  • 通过
    org.glassfish.jaxb:txw2:2.3.2
com.sun.xml.bind:jaxb-core
声明为原始依赖项,
org.glassfish.jaxb:txw2
作为
com.sun.xml.ws:rt
的可传递依赖项。作为解决方案,我应该删除
com.sun.xml.bind:jaxb-core


这就引出了一个问题:我如何通过Gradle检测相同的类在classpath的不同jar中?

到目前为止,我找到了专门的项目来检测所讨论的问题:

我成功地使用了
classpathHell

buildscript {
    repositories {
    dependencies {
        classpath "com.portingle:classpath-hell:1.5"
    }
}

subprojects {
    apply plugin: 'java-library'

    apply plugin: 'com.portingle.classpathHell'
    classpathHell {
        configurationsToScan = [ configurations.runtimeClasspath ]
    }
}
运行方式:

$ gradle help --task checkClasspath
...
Type
     ClasspathHellTask (classpathHell.ClasspathHellTask)
...

$ gradle checkClasspath
...
configuration 'runtimeClasspath' contains duplicate resource: com/sun/xml/txw2/output/IndentingXMLStreamWriter.class
 found within dependency: org.glassfish.jaxb:txw2:2.3.2
  imported via: org.glassfish.jaxb:txw2:2.3.2 <- org.glassfish.jaxb:jaxb-runtime:2.3.2 <- com.sun.xml.ws:rt:2.3.2
 found within dependency: com.sun.xml.bind:jaxb-core:2.3.0.1
  imported via: com.sun.xml.bind:jaxb-core:2.3.0.1
...
$gradle帮助--任务检查类路径
...
类型
ClasspathHellTask(classpathHell.ClasspathHellTask)
...
$gradle checkClasspath
...
配置“runtimeClasspath”包含重复的资源:com/sun/xml/txw2/output/IndentingXMLStreamWriter.class
在依赖项中找到:org.glassfish.jaxb:txw2:2.3.2

通过:org.glassfish.jaxb:txw2:2.3.2 Hi@gavenkoa导入-很高兴您发现它很有用!