Maven 2 如何使Maven模块不导出jar?

Maven 2 如何使Maven模块不导出jar?,maven-2,Maven 2,我有一个包含三个模块的Maven构建 模块A导出一个jar 模块B依赖于A并导出一个jar 模块C是一组依赖于a和B的回归测试 回归测试不仅仅是模块B的一部分的原因是,它们应该能够针对A和B的多个版本运行,以确保向后兼容性。我希望能够从顶层构建运行deploy,以创建A.jar和B.jar,而不是C.jar。这是可能的吗?对于模块C,请使用以下内容: <packaging>pom</packaging> pom maven部署插件包括一个防止工件部署的选项 <

我有一个包含三个模块的Maven构建

  • 模块A导出一个jar
  • 模块B依赖于A并导出一个jar
  • 模块C是一组依赖于a和B的回归测试

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

对于模块C,请使用以下内容:

<packaging>pom</packaging>
pom

maven部署插件包括一个防止工件部署的选项

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

maven部署插件
真的

您可以尝试将其添加到project C中。

使用C的类型为
pom
的打包,然后重新绑定所有必需的插件:

<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>

...
聚甲醛
...
org.apache.maven.plugins
maven编译器插件
测试编译
测试编译
测试编译
org.apache.maven.plugins
maven资源插件
过程测试资源
过程测试资源
测试资源
org.apache.maven.plugins
maven surefire插件
测试
测试
测试
...
...
...

真的

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

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

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

我尝试过了。然后我从顶层运行mvn测试,而C的测试不运行。您可能需要重新组织POM的继承权。例如,您可能需要在顶部使用超级pom,然后将C作为子模块,然后将a和B作为C下的子模块。如果您选择pom的打包类型,则需要根据下面Pascal的回答手动重新绑定所有常用插件。您仍然需要C的jar打包,只需要禁用该模块的部署。sal在这里有正确的答案。我冒昧地添加了如何抑制JAR的创建,以防不需要它。虽然这可能有效,但它相当冗长。Craig P.Motlin的回答提供了一个更好的解决方案。相关:
<plugin>
  <artifactId>maven-deploy-plugin</artifactId>
  <configuration>
      <skip>true</skip>
  </configuration>
</plugin>