Java Maven:当战争发生时,你怎么可能获得依赖;它不在依赖关系树中吗?
我有一个war文件,当我运行Java Maven:当战争发生时,你怎么可能获得依赖;它不在依赖关系树中吗?,java,maven,war,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 您可以在此处看到完整的输出: 我可以在pom中注释掉这个依赖项。当我这样做时,mvn-dependency:tree-Dv
mvn package
时,它在WEB-INF/lib中获得一个slf4j-jdk14依赖项,我不知道它是如何进入的。CD插入战争指挥器并运行mvn dependency:tree-Dverbose
。提到slf4j-jdk14的唯一一行是:
[INFO] +- org.slf4j:slf4j-jdk14:jar:1.6.1:provided
您可以在此处看到完整的输出:
我可以在pom中注释掉这个依赖项。当我这样做时,mvn-dependency:tree-Dverbose
根本没有提到slf4j-jdk14。但是,如果我运行mvncleanpackage
war中仍然有这个jar
这怎么可能?dependency:tree
是否仅显示部分图片?这是一只maven臭虫吗
$ mvn -version
Apache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 08:22:22-0700)
如果我运行help:effective pom
只引用了slf4j-jdk14,则该行不包括它。war插件在我看来是标准的,以下是输出:
<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>
maven战争插件
2.1.1
默认战争
包裹
战争
虽然我很想为此提供pom,但我不能,因为我的公司不允许。我曾尝试在一个示例项目中复制此内容,但未能成功。我希望一些专家能为我指出一条调试这个jar的途径,因为在我对maven的理解中,这是不可能的 对于前面的问题,war插件在复制依赖项时似乎并不排除jar,即使排除了可传递依赖项。因此,您可以尝试排除pom中的其他一些可传递依赖项,并检查它是否未被复制。如果仍被复制,则表示您的slf4j-jdk14以相同的方式被复制
如果是这种情况,您可以尝试使用排除它。请附加整个依赖项:treeTry 3.1。另外,运行help:effectivepom,看看是否有人配置了对war插件没有帮助的东西。@b我更新了argulies并运行了help:effectivepom。我没有看到任何效果。@MariuszS看到我的更新。我把它放在一个gistOK中,但是我说,“我可以在pom中注释掉这个依赖项。当我这样做时,
mvn依赖项:tree-Dverbose
根本没有提到slf4j-jdk14。”这难道不意味着war插件甚至看不到slf4j-jdk14,不管是否可以传递?顺便说一句,我认为war插件配置可能会解决我的问题(我会尝试一下,让你知道),但在我将其标记为答案之前,我想自信地理解为什么会发生这种情况。@tieTYT从我从链接中了解到,war插件似乎不适用于依赖关系树。也许它有自己的逻辑来确定哪些JAR应该被复制,以及该逻辑(可能是mistke?)不排除使用exclude标记排除的工件。