如何触发 maven 构建测试 jar 属性

How to trigger building of tests-jar by maven property

我知道如何通过添加 maven-jar-plugin 来构建测试罐。但这在我的(模块)POM 中需要 14 行代码。

为了节省代码行,我只想在我的模块 POM 中添加一个 Maven-属性 作为开关来决定是否添加测试 jar。 maven-jar-plugin 应该只在父 POM 中定义。

所以我目前的解决方案是:

父 POM 代码:

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

模块 POM 中的代码:

<properties>
    <addTestsJar>test-jar</addTestsJar>
    <!-- 'test-jar' or 'jar' -->
</properties>

所以现在 test-jar 将生成测试 jar,jar 将不会构建测试 jar。

这是一个好的解决方案吗? 还是有什么缺点?

PS: 通过配置文件触发 jests-jar 将不起作用,因为配置文件的激活仅由系统属性触发。

你拥有它的方式,如果你使用 'jar' 目标,我认为 Maven 可能 运行 'jar' 两次 - 一次作为默认构建的一部分,另一次用于执行你补充道。您可以 运行 和 -X 并检查执行 ID 以确定。

另一种方法是使用 test-jar 目标的 skip 参数。默认情况下,此 属性 具有 maven.test.skip 属性 的值。我想如果你跳过测试运行s,我的想法是跳过测试jar的创建?我认为这是两种不同的东西;我可能想 运行 测试而不创建 jar。

考虑到这一点,我会将其添加到父 POM 中:

<properties>
  <skipTestJar>true</skipTestJar>
</properties>

<build>
  <pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.6</version>
        <executions>
            <execution>
                <id>build-test-jar</id>
                <goals>
                    <goal>test-jar</goal>
                </goals>
                <configuration>
                    <skip>${skipTestJar}</skip>
                </configuration>
            </execution>
        </executions>
      </plugin>
    </plugins>
  <pluginManagement>
</build>

然后对于我想要测试 jar 的任何模块,我会更改 属性 值:

<properties>
  <skipTestJar>false</skipTestJar>
</properties>

或者,您可以通过添加 -DskipTestJar=false.

在命令行上设置 属性