Java 相互依赖的Maven子模块
目前我有一个模块,它既有集成测试,也有单元测试。我试图将其分为两个项目,因此单元测试保留在主代码库中,并为集成测试提供一个单独的模块 因此,我创建了一个新的子模块(模块B),它依赖于第一个子模块(模块a),因此集成测试可以访问src代码 我遇到的问题是,单元测试和集成测试都使用一些util断言类(例如,自定义hamcrest断言)。这些util断言不应该存在于模块A的src代码中,但我认为它们也不应该存在于模块A测试目录中 因此,所有这些自定义断言都指向另一个项目。这是非常混乱的。。。有人知道这件事的解决办法吗Java 相互依赖的Maven子模块,java,maven,testing,Java,Maven,Testing,目前我有一个模块,它既有集成测试,也有单元测试。我试图将其分为两个项目,因此单元测试保留在主代码库中,并为集成测试提供一个单独的模块 因此,我创建了一个新的子模块(模块B),它依赖于第一个子模块(模块a),因此集成测试可以访问src代码 我遇到的问题是,单元测试和集成测试都使用一些util断言类(例如,自定义hamcrest断言)。这些util断言不应该存在于模块A的src代码中,但我认为它们也不应该存在于模块A测试目录中 因此,所有这些自定义断言都指向另一个项目。这是非常混乱的。。。有人知道这
我的想法是让模块B拥有包含所有自定义断言类的src目录,这些类可以作为依赖项导入到模块a中(但这会导致循环依赖项错误)。你说得对,事情变得一团糟。这是可维护性的敌人 我要做的是维护模块A中
src/test/java
中的自定义hamcrest断言和匹配器,然后添加maven jar插件的二次执行以创建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>
maven jar插件
试验罐
au/com/mycompany/serialization/**.class
**/地址匹配器类
**/AddressAssertion.class
然后将此jar作为依赖项添加到模块B中:
<dependency>
<groupId>au.com.mycompany.myapp</groupId>
<artifactId>A</artifactId>
<type>test-jar</type>
<scope>test</scope>
</dependency>
au.com.mycompany.myapp
A.
试验罐
测试
您可以通过这种方式最小化复杂性并提高可维护性。My 2×:第三个自定义断言模块听起来完全正确。您为什么要将集成测试放在一个单独的模块中?您知道Maven处理集成测试的方法吗:。通过为集成测试使用不同的名称模式(*IT.java),它们与单元测试(*Test.java)完全分离,并且也可以单独执行。如果您意识到这一点,并且希望/需要模块分离,那么第三个模块对于您的公共类来说是一个很好的选择。如果您在集成测试期间需要具有不同于单元测试的类路径,那么使用集成测试的独立模块是有意义的,而单元测试通常是这样。当然,在这两种情况下使用命名约定都是一个好主意。