Java 具有测试范围的递归maven依赖项
我有一个基础项目(通用)和几个依赖于通用的项目(P1,P2,…)。所有项目都有一些共同的依赖项,比如JUnit。为了避免复制公共依赖项,我将它们放在common pom.xml中Java 具有测试范围的递归maven依赖项,java,maven,junit,Java,Maven,Junit,我有一个基础项目(通用)和几个依赖于通用的项目(P1,P2,…)。所有项目都有一些共同的依赖项,比如JUnit。为了避免复制公共依赖项,我将它们放在common pom.xml中 <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version&g
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
朱尼特
朱尼特
4.10
测试
P1 POM取决于公共数据
<dependency>
<groupId>com.example</groupId>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
com.example
常见的
0.0.1-快照
当我向P1添加JUnit测试用例时,eclipse显示“import org.JUnit无法解析”。但是,当我删除junit的common pom.xml中的“test”范围时,错误就被解决了
为什么maven不能正确处理递归依赖关系?我错过了什么?有没有更好的方法来处理常见的依赖关系?
test
范围内的依赖关系永远不会是可转换的
您可以将公共依赖项
拆分为公共依赖项
和公共测试依赖项
两者都在编译
(默认)范围中包含它们的所有依赖项
现在,您包括了两个依赖项帮助程序,但测试依赖项本身在测试范围内
<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>
com.example
公共依赖项
0.0.1-快照
com.example
通用测试依赖项
0.0.1-快照
测试
compile->test
依赖项链解析为transisitive依赖项的test
依赖项,因此您可以继续
如果需要,同样的技术也可以用于其他作用域
风格的两点:
-
<> LI>如果公共也包含自己的代码,考虑将其拆分为依赖性部分和公共代码部分
- 如果只使用依赖项pom项目,请始终将它们称为
,这样它们就更容易理解,而无需查看它们*-dependencies
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
...
</dependencies>
</dependencyManagement>
朱尼特
朱尼特
4.10
测试
...
在所有子模块中,您都引用此依赖关系(版本和范围取自父pom.xml):
朱尼特
朱尼特
这无疑是最好、最直接的方法。然而,他明确地想把它们组合在一起。
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>