maven-assembly-plugin在这种情况下是有效的

时间:2012-10-04 15:19:48

标签: java maven-2 junit maven-assembly-plugin

我有以下项目结构:

  1. 项目“parent-project”没有任何源文件,子项目为“junit-wrapper”,“child1-test”和“child2-test”。
  2. 子项目“junit-wrapper”在src / main / java中只有java源,这基本上是为了包装层次结构“parent-project”下的所有依赖项和二进制文件。
  3. 子项目“child1-test”和“child2-test”没有源文件,只包含子项目“child1-env”和“child2-env”。
  4. 子项目“child1-env”和“child2-env”在src / test / java中只有junits。
  5. 我想通过构建父pom.xml

    来构建一个超级jar(在junit-wrapper中)

    我希望通过使用maven-assembly-plugin可以实现这一点,但不知道如何在pom.xml中配置它。什么应该是我的pom.xml或assembly.xml(使用插件)条目,以确保实现这一目标?

    请建议。

    感谢。

2 个答案:

答案 0 :(得分:2)

要创建一个包含测试类的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>

在其他模块中,您可以通过以下依赖关系使用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>

答案 1 :(得分:0)

当您将此配置包含在junit-wrapper的pom文件中时,您将获得“超级jar”:

<build>
  <plugins>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>2.2.1</version>
      <executions>
        <execution>
          <id>make-assembly</id>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
          <configuration>
            <descriptorRefs>
              <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

汇编描述符(assembly.xml)不是必需的,因为jar-with-dependencies描述符已在maven-assembly-plugin中可用。请注意,您不应在package阶段之前执行程序集插件。否则,maven模块的代码将无法打包到您的程序集中。