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



我有一个战争文件,当我运行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以相同的方式复制。

如果是这样,您可以尝试使用战争插件配置将其排除。

最新更新