Maven:NoClassDefFoundError,来自其他导入项目的依赖与我的依赖冲突

问题描述 投票:0回答:1

我将我的库(mylib)作为maven依赖项添加,从那时起,这在运行时抛出:线程“主”中的异常java.lang.NoClassDefFoundError:org / apache / logging / log4j / LogManager在 ...引起原因:java.lang.ClassNotFoundException:org.apache.logging.log4j.LogManager在 ......还有6个]

我试图从mylib导入中排除log4j依赖关系,但未发生任何变化。我的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依赖项输出:树

[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。

maven noclassdeffounderror
1个回答
0
投票

我的问题是,您在类路径上有两个不同版本的log4j。在依存关系树中,我看到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

© www.soinside.com 2019 - 2024. All rights reserved.