【问题标题】:How to trigger building of tests-jar by maven property如何通过 Maven 属性触发构建测试罐
【发布时间】:2015-08-06 19:12:10
【问题描述】:

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

为了节省代码行,我只想在我的模块 POM 中添加一个 Maven-Propery 作为开关来决定是否添加测试罐。而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 将不起作用,因为配置文件的激活仅由系统属性触发。

【问题讨论】:

    标签: maven unit-testing properties


    【解决方案1】:

    按照您的方式,如果您使用“jar”目标,我认为 Maven 可能会运行两次“jar”——一次作为默认构建的一部分,另一次用于您添加的执行。您可以使用 -X 运行并检查执行 ID 以确定。

    另一种方法是使用test-jar 目标的skip 参数。默认情况下,此属性具有maven.test.skip 属性的值。如果您跳过测试运行,我想想法是跳过测试 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来设置属性。

    【讨论】:

    • 使用该代码 Maven 会遇到 Unrecognised tag: 'skip' - 所以这不起作用...
    • 糟糕,跳过参数位置错误;我修好了它。看看它现在是否有效。
    • 是的,这就是我想要的,但逻辑倒置。
    猜你喜欢
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    • 2011-02-05
    相关资源
    最近更新 更多