2010-02-05 130 views
12

我有三个模块的Maven构建。如何让Maven模块不导出jar?

  • 模块A输出一个罐子。
  • 模块B依赖于A并输出一个罐子。
  • 模块C是一组回归测试依赖于A和B.

原因回归测试不只是模块B的部分是,他们应该能够针对A的多个版本运行和B以确保向后兼容。我希望能够从顶层构建中运行deploy来创建A.jar和B.jar,但不能创建C.jar。这可能吗?下面

+0

相关:[什么是避免maven-jar的最好方法?](http://stackoverflow.com/questions/2188746/what-is-the-best-way-to-avoid-maven-jar) – sleske 2015-05-18 13:07:31

回答

7
<properties> 
    <maven.deploy.skip>true</maven.deploy.skip> 
</properties> 

如果你不根本不需要创建JAR,您可能需要添加两个属性:

<jar.skipIfEmpty>true</jar.skipIfEmpty> 
<maven.install.skip>true</maven.install.skip> 

请注意,您仍然需要maven.deploy.skip,否则在部署期间构建将失败。

+0

我冒昧添加了如何禁止创建JAR,以防万一不需要。 – sleske 2015-05-18 13:02:33

2

用于模块C:

<packaging>pom</packaging> 
+0

我试过了。然后我从顶层运行mvn测试,而C的测试不运行。 – 2010-02-05 23:25:17

+0

您可能需要重新组织您的POM的层次结构。例如,您可能需要在顶部使用超级pom,然后使用C作为子模块,然后使用A和B作为C下的子模块。 – 2010-02-05 23:29:48

+0

如果选择pom的打包类型,则需要手动重新绑定所有常用的插件根据下面的帕斯卡答案。你仍然希望C的jar包装,你只需要禁用该模块的部署。萨尔在这里有正确的答案。 – joelittlejohn 2011-02-23 10:48:08

5

的行家部署插件包含一个skip选项,防止伪像的部署。

<plugin> 
    <artifactId>maven-deploy-plugin</artifactId> 
    <configuration> 
     <skip>true</skip> 
    </configuration> 
</plugin> 

你可以尝试添加到项目C.

3

使用pom类型的包装C和重新绑定所有需要的插件:

<project> 
    ... 
    <packaging>pom</packaging> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>test-compile</id> 
      <phase>test-compile</phase> 
      <goals> 
       <goal>testCompile</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-resources-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>process-test-resources</id> 
      <phase>process-test-resources</phase> 
      <goals> 
       <goal>testResources</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>test</id> 
      <phase>test</phase> 
      <goals> 
       <goal>test</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
     ... 
    </plugins> 
    ... 
    </build> 
    ... 
</project> 
+0

虽然这可能有效,但它相当详细。 Craig P. Motlin的答案提供了一个更好的解决方案。 – sleske 2015-05-18 13:03:22