Maven 3.0.5和Maven 3.2.1
我有一个Maven项目,它是一个测试库聚合,其目的是如果您依赖于具有“test”范围的项目,那么您可以拥有所需的所有测试库。
我遇到的问题是其中一个包含的测试库的依赖项被包含在Web项目的WAR中。
测试库聚合项目:
<project ...>
<groupId>com.group</groupId>
<artifactId>test-lib</artifactId>
<name>test-lib</name>
<version>1.0.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-test-framework</artifactId>
<version>2.0.0-M19</version>
</dependency>
</dependencies>
</project>
网络项目:
<project ...>
<groupId>com.group</groupId>
<artifactId>web-project</artifactId>
<packaging>war</packaging>
<name>web-project</name>
<version>1.0.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.group</groupId>
<artifactId>test-lib</artifactId>
<version>1.0.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
</project>
在web项目中,我依赖于test-lib,其范围为“test”。当我查看依赖层次结构时,test-lib的所有子依赖项都正确地具有“test”范围。
apacheds-test-framework依赖于commons-io 2.4和commons-fileupload依赖于commons-io 1.1。
我期望发生的是commons-io 2.4仅用于测试,并且在构建WAR时,只有common-io 1.1包含在存档中。但实际上发生的事情是,commons-io 2.4 AND commons-io 1.1包含在WAR中。
我不能简单地从web-project中的test-lib中排除commons-io,因为test-lib需要2.4,我此时无法升级commons-fileupload的版本,而且我不能允许两个JAR都打包在WAR中
在某些情况下,这似乎是Maven处理trasitive依赖项的方式中的一个错误。这不是我第一次让Maven没有测试范围依赖的测试范围依赖关系。我不知道该怎么做。
提前致谢。
答案 0 :(得分:0)
所以我对你的问题created an example based确切地说明了你给出的依赖关系。如果我通过mvn clean package
(Maven 3.2.5)构建项目:
因此,如果我检查创建的war文件的内容,我得到以下内容:
$ unzip -t web/target/web-1.0.8-SNAPSHOT.war
Archive: web/target/web-1.0.8-SNAPSHOT.war
testing: META-INF/ OK
testing: META-INF/MANIFEST.MF OK
testing: WEB-INF/ OK
testing: WEB-INF/classes/ OK
testing: WEB-INF/lib/ OK
testing: WEB-INF/lib/commons-fileupload-1.1.1.jar OK
testing: WEB-INF/lib/commons-io-1.1.jar OK
testing: WEB-INF/web.xml OK
testing: META-INF/maven/com.soebes.examples.so/web/pom.xml OK
testing: META-INF/maven/com.soebes.examples.so/web/pom.properties OK
testing: META-INF/INDEX.LIST OK
No errors detected in compressed data of web/target/web-1.0.8-SNAPSHOT.war.
这正是我期望看到的。
这使我得出结论,在你的情况下,必须涉及一些其他依赖。你能将项目简化为一个有效的例子吗?因此,我们能够深入研究问题的根本原因。
答案 1 :(得分:0)
奇怪的是,清理完工作区后。问题停止了,我在WAR中只有commons-io 1.1。