【问题标题】:is maven-assembly-plugin effective in this casemaven-assembly-plugin 在这种情况下有效吗
【发布时间】:2012-09-25 16:21:36
【问题描述】:

我有以下项目结构:

  1. 项目“parent-project”没有任何源文件,并且有子项目“junit-wrapper”、“child1-test”和“child2-test”。
  2. 子项目“junit-wrapper”在 src/main/java 中只有 java 源代码,创建它基本上是为了包装层次结构“父项目”下的所有依赖项和二进制文件。
  3. 子项目“child1-test”和“child2-test”没有源文件,仅包含“child1-env”和“child2-env”等子项目。
  4. 子项目“child1-env”和“child2-env”在 src/test/java 中只有 junit。

我想通过构建父 pom.xml 来构建一个超级 jar(在 junit-wrapper 中)

我希望通过使用 maven-assembly-plugin 可以做到这一点,但不知道如何在 pom.xml 中进行配置。为了确保实现这一点,我的 pom.xml 或 assembly.xml(on using plugin) 条目应该是什么?

请提出建议。

谢谢。

【问题讨论】:

  • 你想在其他模块/项目中重用来自 junit-wrapper 的类吗?

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    当您将此配置包含到junit-wrapper 的 pom 文件中时,您将获得您的“uber-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 模块的代码将不会被打包到您的程序集中。

    【讨论】:

    • 另外,如果您打算将 child1-env 和 child2-env 的测试包含在超级 jar 中,您必须将它们声明为依赖项,并且您必须确保您是从这两个包中的测试代码构建罐子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 2017-08-09
    相关资源
    最近更新 更多