用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导入-很高兴您发现它很有用!