2012-08-01 79 views
2

我是新来的maven,我有点麻烦缠着这个。maven跨项目集成

我有一堆集成测试捆绑为一个项目。我希望能够将这些测试随意应用于任何其他项目。

如何使用POM将集成测试项目代码导入另一个项目并在集成测试阶段执行?

如果我把它作为依赖项,并且集成测试项目的POM指定阶段集成测试。原始项目的构建周期是否继续进行直至达到集成测试,那么依赖项目将在该阶段接管?

对不起,我觉得我在这里击败一匹死马。你的回应对于让我了解正在发生的事情和我需要做的事情非常有帮助。 我的问题是,即使我的测试代码编译并添加为测试的依赖项作为范围由于某些原因它不执行或检测测试。 该测试被命名为appTest,并且上面有JUnit 4.x标签,我无法弄清楚它为什么不起作用。

回答

1

最好的办法是提取的集成测试,以单独的模块代码,然后你就要跑mvn install发布二进制文件到本地资源库建设的另一项目时可见或只是mvn compile将被要求,如果这些测试将使用在多模块项目中模块具有与父模块相同的版本。 要在另一个项目或模块中使用,应该在依赖项部分声明测试范围,如junit库。

如果上面没有合适的选择可以尝试与试验分类器(文件名的后缀)制备附罐:

<build> 
    <sourceDirectory>src/main/scala</sourceDirectory> 
    <testSourceDirectory>src/test/scala</testSourceDirectory> 
    <pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>test-jar</id> 
         <goals> 
          <goal>test-jar</goal> 
         </goals> 
         <configuration> 
          <includes> 
           <include>com/thenewmotion/test/**/*.*</include> 
          </includes> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

并且除了被用来测试范围的测试罐型或测试分类应补充:

<dependency> 
    <groupId>com.thenewmotion</groupId> 
    <artifactId>msp-solveconnector</artifactId> 
    <version>${project.version}</version> 
    <type>test-jar</type> 
    <scope>test</scope> 
</dependency> 
+0

这基本上是什么,我问。我该怎么做,仍然在其他项目上执行集成测试? 我很欣赏快速回复 – user1569503 2012-08-01 19:19:37

+0

非常感谢我相信我现在明白了。 – user1569503 2012-08-01 19:37:22

+0

我已经尝试了用非常简单的入门代码建议的所有三种方式,但测试模块/项目中的测试不会在其他项目上运行。 sureFire每次都说没有测试可以运行并继续前进。 更多想法?我唯一的另一个做了一个自定义插件,如果可能的话我想避免。 – user1569503 2012-08-01 21:02:26

2

您可以发布您的测试在分离神器配置Maven-JAR-插件和运行MVN安装

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

后来导入从那里你要执行的测试等项目的依赖:

<dependency> 
<groupId>project.with.tests.groupid</groupId> 
<artifactId>projectwithtestsartifatid</artifactId> 
<version>1.0</version> 
<type>test-jar</type> 
<scope>test</scope> 
</dependency> 

无论如何,万无一失或故障保护功能的插件只寻找测试中目标/测试类文件夹,不在classpath中的jar中。有一个关于它的open issue没有固定的版本(至少现在)。

一种解决方法是使用依赖插件解压在目标/测试类测试类,但是这可能污染释放:

<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-dependency-plugin</artifactId> 
<executions> 
    <execution> 
    <id>resource-dependencies</id> 
    <phase>process-test-classes</phase> 
    <goals> 
    <goal>unpack-dependencies</goal> 
    </goals> 
    <configuration> 
    <includeTypes>test-jar</includeTypes> 
    <outputDirectory>${project.build.directory}/test-classes</outputDirectory> 
    </configuration> 
    </execution> 
</executions> 
</plugin>