我正在处理的项目是由多个模块组成的,这些模块都是用maven构建的。一些模块中的测试代码依赖于来自其他模块的测试代码。这些依赖项声明如下。
在依赖模块中:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
在与前一个模块有依赖关系的模块中:
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>themodulename</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
使用此配置,可以成功地执行maven安装阶段。但是,试图运行编译或测试阶段失败了,因为无法解决测试jar文件依赖问题。
从测试jar目标来看,它似乎被配置为在包阶段默认情况下运行,我认为这是问题的原因。
然后,通过将第一个配置修改为:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
查看调试日志,我可以看到目标现在在编译阶段执行,但也包括以下内容:
[WARNING] JAR will be empty - no content was marked for inclusion!
我尝试将包含配置为**/*,并确认默认的testClassesDirectory设置为正确的,但仍然收到相同的警告。
我可以看到,测试类文件夹在运行编译阶段后不存在,这似乎很正常,但是即使在运行测试阶段之后就存在它,并且它包含文件,我仍然会得到"JAR将是空的“警告。
有没有人知道如何修复这个配置,以便我能够成功地运行编译或测试阶段?
发布于 2012-08-24 08:02:02
我坚信测试只应该是一个模块的一部分。您不应该依赖于其他模块中的测试。如果更新测试以不同的行为,那么很难预测会发生什么。
如果您需要共享通用测试数据或公共测试类,那么最好使用该共享测试源创建一个单独的模块。然后使用范围测试让所有测试都依赖于共享的tests。
+-- MyProject
+-- common-test-util
| +-- src
| | +-- main
| | +-- java
| +-- pom.xml
+-- moduleA
| +-- src
| | +-- main
| | | +-- java
| | +-- test
| | +-- java
| +-- pom.xml
+-- moduleB
| +-- src
| | +-- main
| | | +-- java
| | +-- test
| | +-- java
| +-- pom.xml
+-- pom.xml
确保您只依赖于common-test-util
和<scope>test</scope>
,然后您将能够调用
mvn test
在顶层,所有的测试都会运行。
发布于 2013-09-04 02:56:10
我认为这些插件配置适合你。
只是在资源准备和编译中覆盖跳转到false。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>default-testResources</id>
<configuration>
<skip>false</skip>
</configuration>
<phase>process-test-resources</phase>
<goals>
<goal>testResources</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>default-testCompile</id>
<configuration>
<skip>false</skip>
</configuration>
<phase>test-compile</phase>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<configuration>
<skip>false</skip>
</configuration>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
发布于 2012-08-24 09:48:01
您的问题归结于多模块构建中的依赖解决方案。它与测试代码无关。
我确实有这个装置。一个公共模块包含运行时代码和共享测试代码(测试双/模拟等)。测试代码由其他模块中的测试使用。对我们来说效果很好。
"mvn编译“只编译运行时代码。
在父级(反应堆构建)上运行"mvn测试编译“、"mvn测试”或"mvn包“,一切都工作得很完美。反应堆能把一切都解决掉。
如果您在模块级别上运行一个构建,那么该模块的所有约束都必须在回购中。这意味着您必须预先为每个依赖模块运行"mvn安装“。此规则同样适用于常规依赖项和测试依赖项。
如果你希望它会遵循父链接到父模块和其他模块,我一定会让你失望的。父链接仅用于继承pom中的公共设置,而不是用于解决依赖关系。
就我个人而言,我几乎总是从父母那里建造一个完整的反应堆。如果我以前在父级运行了mvn安装,并且知道其他模块没有改变,我只会单独构建一个模块。
希望这能有所帮助。
https://stackoverflow.com/questions/12104668
复制相似问题