如何在maven组件中包含单元测试?

时间:2009-06-19 11:15:34

标签: maven-2 assemblies junit include

原因:我们的项目使用Ant作为命令行界面。在使用maven的程序集插件进行新的程序集之后,我想进行初始测试以查看是否所有程序都已正确组装。因此,我需要在最终装配中包含单元测试。组装后,初始测试将被称为

> ant initTest

的build.xml:

<target="initTest">
  <junit>
   <test class="MyTest" />
  </junit>
</target>

问题是: 我想在src / test / java中保持我的单元测试,而将它们移动到src / main / java。 有没有办法告诉程序集插件包含我的单元测试?汇编描述符中的一个简单的 include 不会这样做......

3 个答案:

答案 0 :(得分:10)

有两个步骤:

  1. 将测试打包到jar和主代码中。
  2. 取决于进行装配的模块中的“-tests”jar。
  3. 要打包测试,您需要加载jar:test-jar目标。 e.g。

    <build>
      <plugins>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <executions>
            <execution>
              <id>test-jar</id>
              <phase>package</phase>
              <goals>
                <goal>test-jar</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>
    

    然后在装配模块中,您可以依赖于生成的工件。

    <dependencies>
      <dependency>
        <groupid>${project.groupId}</groupId>
        <artifactId>some-artifact</artifactId>
        <version>${project.version}</version>
        <classifier>tests</classifier>
      </dependency>
    </dependencies>
    

    关键位是“分类器”。

答案 1 :(得分:2)

@ Dominic-Mitchell的回答根本不适合我。最终工作的是为测试类添加fileSet到我的程序集xml。 请注意,fileSet目录是不同的!这让我困扰了最长时间。

${project.build.directory}用于测试类,将${project.build.outputDirectory}用于main:

<?xml version='1.0' encoding='UTF-8'?>
<assembly>
    <id>toolbar-test</id>
    <formats>
        <format>jar</format>
    </formats>

    <includeBaseDirectory>false</includeBaseDirectory>

    <fileSets>
        <fileSet>
            <directory>${project.build.directory}/test-classes</directory>
            <outputDirectory>/</outputDirectory>
        </fileSet>
        <fileSet>
            <directory>${project.build.outputDirectory}</directory>
            <outputDirectory>/</outputDirectory>
        </fileSet>
    </fileSets>

    <dependencySets>
        <dependencySet>
            <scope>runtime</scope>
            <unpack>true</unpack>
            <unpackOptions>
                <excludes>
                    <exclude>**/LICENSE*</exclude>
                    <exclude>**/README*</exclude>
                </excludes>
            </unpackOptions>
        </dependencySet>
        <dependencySet>
            <scope>test</scope>
            <unpack>true</unpack>
        </dependencySet>
    </dependencySets>
</assembly>

信用到期的信用 - 我在此博客文章中找到了此解决方案:http://alexgaddie.blogspot.com/2010/02/creating-uber-jar-with-maven.html
我不需要博文的profile部分。

答案 2 :(得分:1)

以下为我们工作。

pom.xml摘录:

<build>
    <plugins>

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

assembly.xml摘录:

<dependencySets>
    <dependencySet>
        <outputDirectory>/lib</outputDirectory>
        <useProjectArtifact>true</useProjectArtifact>
        <useProjectAttachments>true</useProjectAttachments>
        <scope>runtime</scope>
    </dependencySet>
</dependencySets>

密钥是useProjectAttachments代码。