Обнаружение конфликтующих классов в classpath с помощью Gradle - PullRequest
0 голосов
/ 02 февраля 2020

Я случайно обнаружил, что мой проект включает 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.

. Возникает вопрос: как я могу обнаружить, что одни и те же классы находятся в разных JAR-файлах на пути к классам с помощью Gradle ?

1 Ответ

0 голосов
/ 02 февраля 2020

Пока я нашел специальные проекты для выявления обсуждаемой проблемы:

У меня был успех с 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
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...