Maven子模块相互依赖

时间:2017-03-14 12:13:39

标签: java maven testing

目前我有一个单独的模块,它同时具有集成测试和单元测试。我正在尝试将其拆分为2个项目,因此单元测试仍保留在主代码库中,并且还有一个单独的模块用于集成测试。

因此,我创建了一个新的子模块(模块B),它取决于第一个子模块(模块A),因此集成测试可以访问src代码。

我遇到的问题是单元测试和集成测试都使用了一些util断言类(例如自定义的hamcrest断言)。这些util断言不应该存在于模块A的src代码中,但我不相信它们应该在模块A的测试目录中。

因此,它指向所有这些自定义断言的另一个项目。这是非常混乱的......有没有人知道这种方式呢?

我的想法是让模块B拥有包含所有自定义断言类的src目录,这些类可以作为依赖项导入模块A(但这会导致循环依赖性错误)。

1 个答案:

答案 0 :(得分:0)

对于变得混乱的事情你是对的。这是可维护性的敌人。

我所做的是在模块A中的src/test/java中维护自定义hamcrest断言和匹配器,然后添加maven-jar-plugin的辅助执行以创建test-jar工件:

        <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>test-jar</goal>
                    </goals>
                    <configuration>
                        <includes>
                            <include>au/com/mycompany/serialization/**.class</include>
                            <include>**/AddressMatcher.class</include>
                            <include>**/AddressAssertion.class</include>
                        </includes>
                    </configuration>
                </execution>
            </executions>
        </plugin>

然后将此jar作为依赖项添加到模块B中:

    <dependency>
        <groupId>au.com.mycompany.myapp</groupId>
        <artifactId>A</artifactId>
        <type>test-jar</type>
        <scope>test</scope>
    </dependency>

以这种方式最小化复杂性并提高可维护性。