我的设置是这样的。我有项目A
,以及一个取决于A
的测试项目:
A <- A_t
我还有其他项目取决于A
(以及他们的测试):
A <- B <- B_t
为了简化某些测试,我引入了一个新的库来帮助测试基于A
的东西:
A <- Atesthelper
所以A_t
(和B_t
)将取决于此测试助手,如下所示:
A <- A_t
^ |
| v
Atesthelper
然而,当我创建Maven项目(pom.xml)时,似乎通常将项目和该项目的测试捆绑在同一个pom.xml中。我为Atesthelper
现在它变成了:
(A <- A_t)
^ |
| v
Atesthelper
这是循环依赖。是否有可能在pom.xml中以某种方式指定Atesthelper
只是测试构建目标的依赖项,而不是A
模块本身的依赖项?
所以构建顺序应该是:A,Atesthelper,A_t。即不应在同一个pom中指定A和A_t。
提前致谢。
答案 0 :(得分:5)
如果我理解正确,您的主要目标是重用测试类。 A_t和Atesthelper不是Maven项目,而是测试。
让Maven从你的src / test / java创建一个jar。见http://maven.apache.org/guides/mini/guide-attached-tests.html
在构建A之后,您将获得A.jar和A-tests.jar。 A-tests.jar将包括Atesthelper和A_t。
将B的依赖关系设置为A-tests.jar(<type>test-jar</type>)
。
答案 1 :(得分:1)
您需要解决的问题是从 Atesthelper 到 A 的依赖关系,然后其他一切都能正常工作: A 取决于< em> Atesthelper , B 依赖于 Atesthelper , A 和 B 都包含两个来源和试验。 A 和 B 中的 Atesthelper 将包含在范围 test 中。这是你的目标状态。
你是如何到达那里的?您需要将 Atesthelper 所依赖的项目提取到单独的项目中。通常,这些是接口或其他常见功能,无论如何都应该放在一个单独的项目中 - 让我们称之为 ACommon 。所以你的目标布局应该是这样的:
ACommon <- Atesthelper
^ ^
| /
A (and also B)
Atesthelper 的功能取决于 A ?你能把它移到一个单独的项目( ACommon )吗?
答案 2 :(得分:0)
你没有粘贴你的POM,我不确定我是否理解你,但我会尽力帮助你。这是很常见的情况,通常应该像这样解决:
支持测试的Atesthelper
工件(可能是jar
打包)应该在src/main
目录中包含所有与测试相关的内容(所以src/main/java
中的类, src/main/resources
等中的资源,而不是src/test
!它的所有依赖项,A
,还有像JUnit,EasyMock(测试支持类需要的所有东西)之类的东西,你用compile
范围声明,这当然是默认的。不要在这里使用test
范围!最后,在A
和B
工件中,将Atesthelper
声明为test
范围的依赖关系。
这个解决方案多年来对我很有用。关于依赖关系是干净利落的(如果你知道我的意思,它们与基于<type>test-jar</type>
的解决方案相比具有传递性。无论如何,只需使用它。你会很高兴;)。
答案 3 :(得分:0)
解决此问题最简洁的方法是将项目分开。像Maven这样的框架鼓励您将Classes和Test Classes放在一个单独的项目中。例如,Eclipse PlugIn项目具有单独的测试项目。使A_t
成为A
的子项目听起来像是最好的解决方案,因为您可以在该测试项目中重用所需的任何依赖项,而不必担心对A
的影响。
这种情况会更频繁地出现,您可能不希望使用测试的依赖性来打扰您的项目设计。这些测试应该是独立的,不会影响你的课堂设计。