多模块项目中的 Maven 测试依赖关系

2023-11-23

我使用 Maven 构建一个多模块项目。我的模块 2 依赖于编译范围内的模块 1 src 以及测试范围内的模块 1 测试。

模块 2 -

   <dependency>
       <groupId>blah</groupId>
       <artifactId>MODULE1</artifactId>
       <version>blah</version>
       <classifier>tests</classifier>
       <scope>test</scope>
   </dependency>

这很好用。假设我的模块 3 依赖于 Module1 src 并在编译时进行测试。

模块 3 -

   <dependency>
       <groupId>blah</groupId>
       <artifactId>MODULE1</artifactId>
       <version>blah</version>
       <classifier>tests</classifier>
       <scope>compile</scope>
   </dependency>

当我跑步时mvn clean install,我的构建运行到模块 3,在模块 3 处失败,因为它无法解析模块 1 测试依赖项。然后我做了一个mvn install仅在模块 3 上,返回并运行mvn install在我的父母 pom 上进行构建。我怎样才能解决这个问题?


我对您想要做什么有疑问,但我假设您想在另一个项目(module1)中重用您为项目(module1)创建的测试。正如底部注释中所解释的使用附加测试指南:

请注意,本指南的先前版本建议使用<classifier>tests</classifier>代替<type>test-jar</type>。虽然这目前适用于某些情况,但如果调用安装之前的生命周期阶段,则在测试 JAR 模块和任何使用者的反应器构建期间,它无法正常工作。在这种情况下,Maven 不会从反应器构建的输出中解析测试 JAR,而是从本地/远程存储库中解析。显然,存储库中的 JAR 可能已过时或完全丢失,从而导致构建失败(参见MNG-2045).

因此,首先,要将已编译的测试打包到 JAR 中并部署它们以供一般重用,请配置maven-jar-plugin如下:

<project>
  <build>
    <plugins>
     <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>
    </plugins>
  </build>
</project>

然后,照常安装/部署测试 JAR 工件(使用mvn install or mvn deploy).

最后,要使用测试 JAR,您应该指定具有指定类型的依赖项test-jar:

<project>
  ...
  <dependencies>
    <dependency>
      <groupId>com.myco.app</groupId>
      <artifactId>foo</artifactId>
      <version>1.0-SNAPSHOT</version>
      <type>test-jar</type>
      <scope>test</scope>
    </dependency>
  </dependencies>
  ...
</project>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多模块项目中的 Maven 测试依赖关系 的相关文章

随机推荐