我有一个war文件,当我运行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/691b020f4f908f92015f
我可以在pom中注释掉这种依赖性。当我这样做时,mvn dependency:tree -Dverbose
根本没有提到slf4j-jdk14。但是,如果我然后运行mvn clean package
战争仍然有这个罐子。
这怎么可能? dependency:tree
仅显示部分图片吗?这是一个maven bug吗?
$ 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,但我不能,因为我的公司不会允许它。我试图在一个示例项目中重现这个并且无法做到。我希望有一位专家可以指出我调试这个jar来自哪里的路径,因为在我对maven的理解中,这应该是不可能的。
答案 0 :(得分:0)
This answer说,即使排除了传递依赖关系,war插件在复制依赖关系时似乎也不会排除jar。因此,您可以尝试在pom中排除其他一些传递依赖项,并检查它是否未被复制。如果它仍然被复制,则意味着你的slf4j-jdk14以相同的方式被复制。
如果是这种情况,您可以尝试使用war plugin configuration排除它。