我有一个基础项目(常见)和几个依赖于常见的项目(P1,P2,...)。所有项目都有一些常见的依赖项,例如JUnit。为了避免复制公共依赖项,我将它们放在公共pom.xml
中 <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
P1 POM取决于常见的
<dependency>
<groupId>com.example</groupId>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
当我向P1添加一个JUnit测试用例时,eclipse显示&#34;导入org.junit无法解析&#34;。但是,当我删除&#34;测试&#34;在junit的常见pom.xml中,错误已解决。
为什么没有正确处理递归依赖?我错过了什么?有没有更好的方法来处理常见的依赖关系?
答案 0 :(得分:2)
test
范围内的依赖关系永远不会是tranistive。
您可以做的是将common-dependencies
分成common-dependencies
和common-test-dependencies
。
两者都包含compile
(默认)范围内的所有依赖项。
现在,您既包含依赖项助手,又包括测试依赖项本身。
<dependency>
<groupId>com.example</groupId>
<artifactId>common-dependencies</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.example</groupId>
<artifactId>common-test-dependencies</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>test</test>
</dependency>
compile->test
依赖关系链解析为traenitive依赖关系的test
依赖关系,因此您可以继续使用。
如果需要,同样的技术也可以用于其他范围。
两种风格:
*-dependencies
,以便在不查看它们的情况下更容易理解答案 1 :(得分:0)
您还可以使用dependencyManagement使用不同的方法:
(blackbuild的答案肯定是正确的,但不是接近它的唯一方法,有些人,像我一样,不想创建单独的模块来管理依赖关系)。
在root pom中定义:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
...
</dependencies>
</dependencyManagement>
并且在所有子模块中引用此依赖项(版本和范围取自父pom.xml):
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>