【问题标题】:Maven : Child pom's argline is not applied?Maven:未应用子 pom 的 argline?
【发布时间】:2018-08-15 14:39:33
【问题描述】:

我有一个多模块 Maven 项目。在子模块中,故障安全插件用于集成测试运行。一些 argLines 是相应定义的:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <configuration>
        <skipAfterFailureCount>1</skipAfterFailureCount>
        <argLine>-Xmx2048M -Xss512M -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC</argLine>
    </configuration>
</plugin>

问题是当我以mvn testmvn integration-test 运行测试时,不会将arglines 应用于父pom 目录和子pom 目录中的测试,但如果我以mvn failsafe:integration-test 运行测试从两个目录中,都会应用 arglines 参数。

这背后的原因是什么?当我使用 mvn test 命令运行测试时,有什么方法可以应用这些参数?我试图通过命令行将参数传递为mvn test -Dchild.argline="-Xmx2048M -Xss512M -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC"

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <configuration>
        <skipAfterFailureCount>1</skipAfterFailureCount>
        <argLine>${child.argline}</argLine>
    </configuration>
</plugin> 

但是没有用。

我还尝试将测试和集成测试阶段绑定到故障安全集成测试并在那里定义配置参数,但效果不佳..

我相应地设置了 MAVEN_OPTS,但它没有帮助...

【问题讨论】:

    标签: maven maven-failsafe-plugin


    【解决方案1】:

    默认情况下,failsafe 插件目标不包含在生命周期中。 POM 配置必须包含它。有关示例,请参阅this SO answer。还要确保插件定义在 &lt;plugins&gt; 部分中,而不是在 &lt;pluginManagement&gt; 元素内。

    至于如何在 POM 中定义选项 - 使用 documentation 中提供的名称。因此,要指定 argLine,请添加

    <argLine>...</argLine>
    

    在插件配置中。要在命令行上指定,请注意“用户属性”中要设置的值。对于failsafe插件的argLine,user属性也是argLine,所以在命令行指定

    -DargLine=...
    

    Maven 对child.argline 一无所知,所以默默地忽略它。另请注意,属性和用户属性名称区分大小写。

    【讨论】:

    • 所以,我添加了 executions 属性,与您提到的答案完全相同,并将 添加到配置部分,但是当我从父 pom 运行 mvn:test目录,仍然没有应用 argLine 进行集成测试运行..
    • 这是意料之中的。 mvn test 不运行故障保护。它只运行万无一失。试试mvn verifymvn install。提示,如果您经常使用 Maven,详细阅读 Maven lifecycle docs 会很有用。
    猜你喜欢
    • 1970-01-01
    • 2013-09-22
    • 2012-03-17
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 2012-11-29
    • 2015-01-27
    • 1970-01-01
    相关资源
    最近更新 更多