【发布时间】:2018-10-19 15:27:12
【问题描述】:
我们有一个新的 Maven 项目,当我们使用 exec-maven-plugin 通过 maven 配置文件启动我们的进程时,我们遇到了一个问题。进程启动失败并出现以下错误:
java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.slf4j.impl.JDK14LoggerFactory loaded from file:/C:/Users/xxxxxxxxxxxx/.m2/repository/org/slf4j/slf4j-jdk14/1.5.6/slf4j-jdk14-1.5.6.jar). If you are using WebLogic you will need to add 'org.slf4j' to prefer-application-packages in WEB-INF/weblogic.xml Object of class [org.slf4j.impl.JDK14LoggerFactory] must be an instance of class ch.qos.logback.classic.LoggerContext
当我们尝试删除对 logback-classic jar 的所有引用时,该过程开始正常,尽管我们失去了日志记录功能,因为它归结为 SLF4J 的基本日志记录。
因此,所有对 slf4j-jdk14 的引用都已从 POM 中删除,并且依赖关系树也已得到验证。然后发现maven插件拉入了slf4j-jdk14 jar。
- maven-jar-plugin - 将它从 2.6 降级到 2.4 就可以了
- maven-failsafe-plugin & maven-resources-plugin - 我们找不到使用这些插件的方法。升级/降级不起作用(或者我们可能找不到确切的可用版本)
所以真正的问题是:我们如何从 maven 插件中排除 slf4j-jdk14 jar?
已尝试以下方法,但似乎不起作用:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<executions>
<execution>
<id>integration-test</id>
<configuration>
<includes>
<include>**/*IT.java</include>
</includes>
</configuration>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.5.6</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</plugin>
此外,谷歌搜索也没有多大帮助。任何指针将不胜感激。
谢谢, 弥敦道
【问题讨论】:
-
Maven 正在下载 slf4j-jdk 的 1.5.6 版 - 因此该版本已被用于排除。我不太确定 maven-failsafe-plugin 使用的是哪个版本的 slf4j。