解决test,testhelper和test-in-test之间的Maven循环依赖关系

Bja*_*sen 5 dependencies maven-2 unit-testing circular-dependency maven

我的设置就是这个.我有项目A,测试项目取决于A:

A <- A_t
Run Code Online (Sandbox Code Playgroud)

我还有其他项目取决于A(和他们的测试):

A <- B <- B_t
Run Code Online (Sandbox Code Playgroud)

为了简化一些测试,我引入了一个新的库来帮助测试基于以下内容的测试A:

A <- Atesthelper
Run Code Online (Sandbox Code Playgroud)

所以A_t(和B_t)将取决于这个测试助手,如下所示:

A <- A_t
^    |
|    v
Atesthelper
Run Code Online (Sandbox Code Playgroud)

但是,当我创建Maven项目(pom.xml)时,似乎通常将项目和该项目的测试捆绑在同一个pom.xml中.我为它创建了一个新的pom.xmlAtesthelper

所以现在变成:

(A <- A_t)
  ^    |
  |    v
Atesthelper
Run Code Online (Sandbox Code Playgroud)

这是循环依赖.是否有可能在pom.xml中以某种方式指定它Atesthelper只是测试构建目标的依赖项,而不是A模块本身?

所以构建顺序应该是:A,Atesthelper,A_t.即,在同一个pom中指定的A和A_t不应该同时构建.

提前致谢.

Ale*_*kov 6

如果我理解正确,您的主要目标是重用测试类.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>).


nwi*_*ler 1

您需要解决的问题是从AtesthelperA 的依赖关系,然后其他一切都会正常工作:A依赖于AtesthelperB依赖于Atesthelper,并且AB都将包含源和测试。Atesthelper将包含在AB中的范围测试中。这就是你的目标状态。

你怎么到那的?您需要将Atesthelper所依赖的项目提取到单独的项目中。通常,这些是接口或其他常见功能,无论如何都应该将其放入单独的项目中 - 让我们将其称为ACommon。所以你的目标布局应该是这样的:

ACommon <- Atesthelper
       ^    ^
       |   /
         A (and also B)
Run Code Online (Sandbox Code Playgroud)

Atesthelper依赖于A中的哪种功能?您可以将其移至单独的项目(ACommon)吗?