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



我将我的库(mylib)作为maven依赖项包含在内,从那时起,这将在运行时抛出:线程"main"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。

我的快速问题是,类路径上有两个不同版本的log4j。在依赖树中,我看到了org.apache.logging.log4j:log4j-api:jar:2.11.2,但也看到了log4j:log4j:jar:1.2.17。您已经从mylib中排除了过渡依赖项org.apache.logging.log4j:log4j-core,但log4j-api仍然存在。

尝试删除对org.apache.logging.log4j:log4j-core的排除,并从项目中删除log4j:log4j:jar:1.2.17。这样,log4j2.11.2应该只有一个版本。

最新更新