繁体   English   中英

java-maven2:如何在pom中包含一个jar作为依赖,这样我就可以访问src / test / java文件夹中的测试类或类

[英]java-maven2: How to include the a jar as depedency in pom so that I will be able to access test classes or classes in src/test/java folder

我有一组功能罐(超过3个)来测试我的源代码。 这些jar只包含测试类和辅助asserter类。 我正在创建一个新的性能jar,它将从这些jar导入所有功能测试,以便所有这些都可以同时运行。 但是当我将它们作为测试依赖项包含在当前jar的pom中时,我所能看到的是src / main / java中的类。 如何将这些功能罐包含为依赖jar,以便我也可以在src / test / java中引用类。 换句话说,我如何引用其他jar中的测试类。 我应该以什么方式将依赖包括在内。

谢谢你的支持。

第一种选择

将您的常用“测试”代码放在一个单独的模块中(在src/main/java ),并在需要公共代码的模块中使用test范围声明对该模块的依赖:

<dependency>
  <groupId>my.group.id</groupId>
  <artifactId>testing-framework</artifactId>
  <version>${project.version}</version>
  <scope>test</scope>
</dependency>

这是一种常见的做法,这没有任何问题。

第二种选择

使用Maven JAR插件及其jar:test-jar目标来构建当前项目的测试类的JAR,作为package阶段的一部分( jar:test-jar默认绑定在package ):

<project>
  <build>
    <plugins>
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-jar-plugin</artifactId>
       <version>2.3.1</version>
       <executions>
         <execution>
           <goals>
             <goal>test-jar</goal>
           </goals>
         </execution>
       </executions>
     </plugin>
    </plugins>
  </build>
</project>

要使用上面创建的附加测试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>

请参阅“使用附加测试指南”底部的讨论,了解为什么<type>test-jar</type>应优先于<classifier>tests</classifier>

默认情况下, src/test/java的代码不包含在jar中(我认为这是一件好事,即使我可以改变它也会谨慎)。

我发现将常用的测试代码放入一个单独的maven模块的src/main/java中是一个非常好的做法。 然后,只需将此模块作为测试范围的依赖项包含在您需要的位置。

要么采用Lauri建议的方式,要么在没有专用测试工件的情况下使用稍微变化,但是在src / test / java中也有公共测试类的公共工件。

在此项目中,使用test-jar mojo创建并附加此项目的测试jar

现在在派生项目中,您可以包含这样的依赖项:

<dependency>
    <groupId>...</groupId>
    <artifactId>...</artifactId>
    <version>...</version>
    <scope>test</scope>
    <classifier>test</classifier>
</dependency>

这样,如果您已经有一个commons项目,则不需要创建单独的测试项目

mvn package不会破坏测试类和资源。 所以你必须把依赖项放到src / main / java中。

每当我这样做时,我创建一个名为“someproj-testutils”的jar项目,并在正常的src/main/ locations中有辅助类或基本测试类和资源,然后引用someproj-testutils作为测试作用域dep。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM