我有一个战争文件,当我运行mvn package
时,Web-Inf/lib中获得SLF4J-JDK14的依赖项,我无法弄清楚它是如何进入的。CD进入战争局长,并运行了mvn dependency:tree -Dverbose
。提到SLF4J-JDK14的唯一行是:
[INFO] +- org.slf4j:slf4j-jdk14:jar:1.6.1:provided
您可以在此处看到完整的输出:https://gist.github.com/dankmirth/691b020f4f908f908f92015f
我可以在POM中评论这种依赖性。当我这样做时,mvn dependency:tree -Dverbose
根本不提到SLF4J-JDK14。但是,如果我运行mvn clean package
,战争仍然有这个罐子。
这怎么可能?dependency:tree
仅显示图片的一部分吗?这是小错误吗?
$ mvn -version
Apache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 08:22:22-0700)
如果我运行的help:effective-pom
只有对SLF4J-JDK14的引用,则在不包括它的行中。战争插件对我来说是标准的,这是输出:
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<executions>
<execution>
<id>default-war</id>
<phase>package</phase>
<goals>
<goal>war</goal>
</goals>
</execution>
</executions>
</plugin>
尽管我很想为此提供POM,但我不能,因为我的公司不允许这样做。我试图在示例项目中复制此功能,但无法进行。我希望那里的一些专家可以将我指向该罐子来的调试之路,因为在我对Maven的理解中,这是不可能的。
上一个问题的答案说,即使排除了及其依赖性,战争插件似乎也不会排除jar时的jar。因此,您可以尝试在POM中排除其他一些及时的依赖性,并检查它是否不会复制。如果仍然被复制,则意味着您的slf4j-jdk14以相同的方式复制。
如果是这样,您可以尝试使用战争插件配置将其排除。