Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 相互依赖的Maven子模块_Java_Maven_Testing - Fatal编程技术网

Java 相互依赖的Maven子模块

Java 相互依赖的Maven子模块,java,maven,testing,Java,Maven,Testing,目前我有一个模块,它既有集成测试,也有单元测试。我试图将其分为两个项目,因此单元测试保留在主代码库中,并为集成测试提供一个单独的模块 因此,我创建了一个新的子模块(模块B),它依赖于第一个子模块(模块a),因此集成测试可以访问src代码 我遇到的问题是,单元测试和集成测试都使用一些util断言类(例如,自定义hamcrest断言)。这些util断言不应该存在于模块A的src代码中,但我认为它们也不应该存在于模块A测试目录中 因此,所有这些自定义断言都指向另一个项目。这是非常混乱的。。。有人知道这

目前我有一个模块,它既有集成测试,也有单元测试。我试图将其分为两个项目,因此单元测试保留在主代码库中,并为集成测试提供一个单独的模块

因此,我创建了一个新的子模块(模块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)完全分离,并且也可以单独执行。如果您意识到这一点,并且希望/需要模块分离,那么第三个模块对于您的公共类来说是一个很好的选择。如果您在集成测试期间需要具有不同于单元测试的类路径,那么使用集成测试的独立模块是有意义的,而单元测试通常是这样。当然,在这两种情况下使用命名约定都是一个好主意。