【问题标题】:Maven Config Plugins running twiceMaven 配置插件运行两次
【发布时间】:2017-05-31 18:31:29
【问题描述】:

我有以下 pom 配置。我添加了cobertura插件,现在pmd、cpd、findbugs和test运行了两次。

我知道这是因为我的“阶段”配置,但我不明白如何实现以下目标:

我想要的是在我提交 repo 之前,构建我的应用程序并检查 pmd 错误、findbugs 错误、检查我的测试以及检查我的 cobertura。

我怎样才能做到这一点?我习惯在提交之前运行“mvn clean package”。可以吗?

这是我的配置:

...
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pmd-plugin</artifactId>
        <version>3.8</version>
        <configuration>
            <linkXref>false</linkXref>
            <rulesets>
                <!-- Custom Ruleset -->
                <ruleset>codequality/pmd.xml</ruleset>
            </rulesets>
        </configuration>
        <executions>
            <execution>
                <phase>compile</phase>
                <goals>
                    <goal>pmd</goal>
                    <goal>cpd</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>findbugs-maven-plugin</artifactId>
        <version>3.0.4</version>
        <executions>
            <execution>
                <phase>compile</phase>
                <goals>
                    <goal>check</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
        <version>2.7</version>
        <configuration>
            <check>
                <haltOnFailure>true</haltOnFailure>
                <branchRate>70</branchRate>
                <lineRate>70</lineRate>
                <totalBranchRate>70</totalBranchRate>
                <totalLineRate>70</totalLineRate>
                <packageLineRate>70</packageLineRate>
                <packageBranchRate>70</packageBranchRate>
            </check>
        </configuration>
        <executions>
            <execution>
                <phase>compile</phase>
                <goals>
                    <goal>clean</goal>
                    <goal>check</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
</plugins>
</build>

【问题讨论】:

    标签: maven pmd cobertura phase


    【解决方案1】:

    任何 maven 插件都有一个默认的执行阶段。在这种情况下,您应用的插件将在验证阶段执行 (pmd-plugin)。但是您将其定义为也在编译阶段运行。移除阶段标签,让它在验证阶段运行。

    <execution>
       <!--<phase>compile</phase>-->
       <goals>
           <goal>...</goal>
           ...
       </goals>
    </execution>
    

    最后,在提交之前验证项目的最佳做法是运行:

    mvn clean 验证

    【讨论】:

    • 在 Jenkins 中运行的 maven 命令应该是哪个(在我的提交完成之后)?现在也是“mvn clean package”。
    • 你应该在之后(或者如果你不使用 jenkins,在提交之前)运行 mvn verify。 surefire、failsafe、jshint... 和其他插件在验证阶段执行。如果你运行 mvn package 这些插件不会被执行,除非你在插件配置中定义了前一个阶段的执行(但是当你执行 install 时,如果你的执行阶段不是插件的默认阶段,你会运行插件两次)。
    • 谢谢,但我不明白在 Jenkins 配置中要执行什么?和我的开发机器一样吗?
    • 是的。您应该在 jenkins 上执行 mvn verify -s settings.xml (settings.xml 是可选的,但在您使用自己的 repo 时需要)。
    • 所以我尝试删除所有插件的相位线,当我运行“mvn clean verify”时,现在触发了两次测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 2013-03-25
    相关资源
    最近更新 更多