Maven: NoClassDefFoundError, зависимость от другого импортированного проекта противоречит моей зависимости - PullRequest
0 голосов
/ 14 октября 2019

Я включил мою библиотеку (mylib) в качестве зависимости maven, и с тех пор она генерируется во время выполнения: исключение в потоке "main" java.lang.NoClassDefFoundError: org / apache / logging / log4j / LogManager at ... Вызвано: java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager at ... ... еще 6

Я пытался исключить зависимость log4j из импорта mylib, но никаких изменений не произошло. Отрывок из моего pom.xml.

</properties>
    <slf4j.version>1.7.7</slf4j.version>
    <log4j.version>1.2.17</log4j.version>
    <mylib.version>1.0.0</mylib.version>
</properties>
<dependencies>
    <dependency>
        <groupId>cz.mylib.name</groupId>
        <artifactId>mylib</artifactId>
        <version>${mylib.version}</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>${slf4j.version}</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>${slf4j.version}</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>${log4j.version}</version>
    </dependency>
</dependencies>

Вывод из зависимости mvn: tree

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ name ---
[INFO] cz.project.name.name:name:jar:1.30.0
[INFO] +- com.github.cverges.expect4j:expect4j:jar:1.6:compile
[INFO] |  +- org.apache.servicemix.bundles:org.apache.servicemix.bundles.oro:jar:2.0.8_6:compile
[INFO] |  +- com.jcraft:jsch:jar:0.1.50:compile
[INFO] |  +- commons-net:commons-net:jar:3.3:compile
[INFO] |  \- net.sourceforge.tcljava:com.springsource.tcl.lang.jacl:jar:1.4.1:compile
[INFO] |     \- net.sourceforge.tcljava:com.springsource.tcl.lang:jar:1.4.1:compile
[INFO] +- commons-cli:commons-cli:jar:1.2:compile
[INFO] +- org.apache.commons:commons-exec:jar:1.3:compile
[INFO] +- commons-io:commons-io:jar:2.4:compile
[INFO] +- commons-lang:commons-lang:jar:2.6:compile
[INFO] +- cz.mylib.name:mylib:jar:1.0.0:compile
[INFO] |  +- org.apache.logging.log4j:log4j-api:jar:2.11.2:compile
[INFO] |  +- javax.xml.bind:jaxb-api:jar:2.3.1:compile
[INFO] |  |  \- javax.activation:javax.activation-api:jar:1.2.0:compile
[INFO] |  \- com.opencsv:opencsv:jar:4.6:compile
[INFO] |     +- org.apache.commons:commons-lang3:jar:3.8.1:compile
[INFO] |     +- org.apache.commons:commons-text:jar:1.3:compile
[INFO] |     +- commons-beanutils:commons-beanutils:jar:1.9.3:compile
[INFO] |     |  +- commons-logging:commons-logging:jar:1.2:compile
[INFO] |     |  \- commons-collections:commons-collections:jar:3.2.2:compile
[INFO] |     \- org.apache.commons:commons-collections4:jar:4.2:compile
[INFO] +- jlibdiff:jlibdiff:jar:1.01:compile
[INFO] +- org.slf4j:slf4j-api:jar:1.7.7:compile
[INFO] +- org.slf4j:jcl-over-slf4j:jar:1.7.7:runtime
[INFO] +- org.slf4j:slf4j-log4j12:jar:1.7.7:runtime
[INFO] +- log4j:log4j:jar:1.2.17:compile
[INFO] \- junit:junit:jar:4.11:test
[INFO]    \- org.hamcrest:hamcrest-core:jar:1.3:test

mylib pom.xml

 <dependencies>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.11.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.11.2</version>
        </dependency>
 </dependencies>
CLASSPATH=$APP_HOME/lib/myproject-1.30.0.jar:$APP_HOME/lib/ojdbc6.jar:$APP_HOME/lib/jlibdiff-1.01.jar:$APP_HOME/lib/commons-cli-1.2.jar:$APP_HOME/lib/commons-io-2.4.jar:$APP_HOME/lib/commons-exec-1.3.jar:$APP_HOME/lib/commons-lang-2.6.jar:$APP_HOME/lib/slf4j-api-1.7.7.jar:$APP_HOME/lib/jcl-over-slf4j-1.7.7.jar:$APP_HOME/lib/slf4j-log4j12-1.7.7.jar:$APP_HOME/lib/log4j-1.2.17.jar:$APP_HOME/lib/mylib-1.0.0.jar

$ APP_HOME/ lib содержит все библиотеки slf4j и log4j, а также mylib.

1 Ответ

0 голосов
/ 15 октября 2019

Я хочу сказать, что у вас есть две разные версии log4j на classpath. В дереве зависимостей я вижу org.apache.logging.log4j:log4j-api:jar:2.11.2, но также log4j:log4j:jar:1.2.17. Вы исключили переходную зависимость org.apache.logging.log4j:log4j-core из mylib, но log4j-api все еще там.

Попробуйте удалить исключение org.apache.logging.log4j:log4j-core, а также удалить log4j:log4j:jar:1.2.17 из проекта. Таким образом, должна быть только одна версия log4j 2.11.2.

...