Maven:当你的战争不在你的依赖树中时,怎么可能在战争中获得依赖?

时间:2014-01-24 23:42:13

标签: java maven war

我有一个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的理解中,这应该是不可能的。

1 个答案:

答案 0 :(得分:0)

前一个问题的

This answer说,即使排除了传递依赖关系,war插件在复制依赖关系时似乎也不会排除jar。因此,您可以尝试在pom中排除其他一些传递依赖项,并检查它是否未被复制。如果它仍然被复制,则意味着你的slf4j-jdk14以相同的方式被复制。

如果是这种情况,您可以尝试使用war plugin configuration排除它。