首页 文章

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

提问于
浏览
75

我使用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的测试依赖性 . 然后我单独在模块3上执行 mvn install ,返回并在我的父pom上运行 mvn install 以使其构建 . 我怎样才能解决这个问题?

3 回答

  • 2

    我怀疑你要做什么,但我会假设你想重用你为另一个项目(module1)创建的测试 . 如Guide to using attached tests底部的说明中所述:

    请注意,本指南的先前版本建议使用<classifier> tests </ classifier>而不是<type> test-jar </ type> . 虽然目前适用于某些情况,但在调试JAR模块的反应器构建期间,如果调用安装之前的生命周期阶段,则它在任何使用者中都无法正常工作 . 在这种情况下,Maven不会从reactor构建的输出解析测试JAR,而是从本地/远程存储库解析测试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 installmvn 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>
    
  • 15

    关于我对Pascals问题的评论,我想我找到了一个合适的答案:

    <plugins>
        <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.2</version>
            <executions>
                <execution>
                <goals>
                    <goal>test-jar</goal>
                </goals>
                <phase>test-compile</phase>
            </execution>
            </executions>
            <configuration>
                <outputDirectory>${basedir}\target</outputDirectory>
            </configuration>
        </plugin>
    </plugins>
    

    这里看到的主要区别是 <phase> 标签 .

    我将创建测试jar,它将在测试的编译阶段提供,而不仅仅是在封装阶段之后 .

    适合我 .

  • 112

    正如https://maven.apache.org/plugins/maven-jar-plugin/examples/create-test-jar.html所说:

    如何创建包含测试类的jar当您想要创建包含测试类的jar时,您可能希望重用这些类 . 有两种方法可以解决这个问题:简单方法使用当前项目中的测试类创建一个附加的jar,并放弃其传递的测试范围依赖项 . 首选方法使用测试类创建单独的项目 .

    请阅读该文章了解详情 .

相关问题