解决测试,testhelper,以及项目下的测试之间的Maven循环依赖(Resolving Mav

2019-06-23 16:25发布

我的设立是这样的。 我有项目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中该项目的测试。 我创建了一个新的pom.xml Atesthelper

所以,现在就变成:

(A <- A_t)
  ^    |
  |    v
Atesthelper

这是一个循环依赖。 是否有可能在pom.xml以某种方式指定Atesthelper仅仅是测试版本,目标的依赖,而不是A本身模块?

所以构建顺序应该是:A,Atesthelper,A_T。 即A和A_T这是在同一个POM中指定,不应该建立在同一时间。

提前致谢。

Answer 1:

你需要解决的问题是从AtesthelperA的依赖,那么一切将正常工作: 要看Atesthelper,B依赖于AtesthelperAB将同时包含源和测试。 Atesthelper将包含在AB两个范围测试 。 这就是你的目标状态。

你怎么到那的? 你需要提取Atesthelper取决于到一个单独的项目的项目。 通常,这些接口或其他常用功能,这本来也应该放入一个单独的项目-我们称之为ACommon。 所以,你的目标布局应该是这样的:

ACommon <- Atesthelper
       ^    ^
       |   /
         A (and also B)

什么样的功能Atesthelper取决于 ? 你可以把它移到一个单独的项目(ACommon)?



Answer 2:

如果我理解你的权利,你的主要目标是重复使用的测试类。 A_T和Atesthelper不是Maven项目,他们的测试。

让Maven来创建你的src / test / java下一个罐子。 见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>)



Answer 3:

你没贴你的POM,我不知道如果我理解正确的话,但我会尽力帮助你怎样,我得到了它。 这是通常应该解决这样很常见的情况:

Atesthelper神器(可能是jar包装),支持的测试,应该在所有的测试相关的东西src/main目录(所以在类src/main/java ,在资源src/main/resources等),不src/test ! 其所有的依赖关系,因此A ,但也很喜欢的JUnit,EasyMock的(所有的东西,测试支持类需要)的东西,你用声明compile范围,这是默认的课程之一。 不要用test此范围内! 最后,在AB工件,声明Atesthelper作为依赖性test范围。

对我多年的这种解决方案的伟大工程。 它是干净的,有关相关straigt(他们在对比传递<type>test-jar</type>为基础的解决方案,如果你知道我的意思)。 总之,只要使用它。 你会很高兴;)。



Answer 4:

要解决这个问题,最彻底的方法是保持分离项目。 有喜欢的Maven鼓励你把类和测试类到一个单一的项目框架。 Eclipse插件项目例如有独立的测试项目。 制作A_t的一个子项目A听起来像最好的解决办法,因为你可以重用你想在测试项目中的任何依赖关系,不必担心影响A

这种情形会更频繁出现,你可能不希望与测试依赖打扰你的项目设计。 这些测试应该是独立的,不影响你的类的设计。



文章来源: Resolving Maven circular dependencies between test, testhelper, and project-under-test