3

我有一个使用Maven构建的 Java 项目,因此我的构建过程是在项目的pom.xml文件中定义的。我的开发团队使用各种插件来检查我们源代码的质量;一个这样的插件使用PMD来检查代码。该插件确保每次我们mvn install在项目上执行时都会运行 PMD,如果有违规,它将导致构建失败。这是我们 pom.xml 中的插件:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-pmd-plugin</artifactId>
            <version>2.7.1</version>
            <configuration>
                <targetJdk>1.6</targetJdk>
                <linkXref>false</linkXref>
                <failOnViolation>true</failOnViolation>
                <failurePriority>1</failurePriority>
                <rulesets>
                    <ruleset>config/pmd-rulesets.xml</ruleset>
                </rulesets>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>check</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

我的问题是有时——尤其是当我正在开发一项任务并且我想检查我的代码是否构建时,但在我准备将我的源代码提交给 SCM 以进行自动构建和发布之前给其他人——当我想抑制 PMD 违规导致我的构建失败时。我知道这样一种解决方案是进入代码并添加注释以抑制警告(http://pmd.sourceforge.net/suppressing.html),但我相信以这种方式编辑源代码只是为了抑制这些违规行为是烦人且容易出错。我可以做的另一件事是编辑我的 pom 并注释掉 PMD 插件。但是,我再次发现,更改对我的整个应用程序至关重要的文件既烦人又容易出错。

我的团队想要的解决方案是允许我们简单地将某种标志或参数传递到我们的mvn命令中,以快速告诉构建过程跳过 PMD 插件。例如,每当我们在开发阶段运行安装并且我们知道集成测试可能会失败(例如,Web 服务可能未激活)时,我们-Dskip.integration.tests=truemvn install. 这是一个比编辑我们的测试文件或更改 pom.xml 更简洁的解决方案。我正在寻找一个类似的变量来允许我们快速跳过 PMD 违规。谢谢!

PS:我做了功课。以下两个 Stackoverflow 问题不包含我想要的解决方案:

4

2 回答 2

14

只需在 pom.xml 中将 failPmdOnViolation 属性声明为 true,在插件设置中指定该属性而不是硬编码常量,然后您可以通过从命令行激活特殊配置文件来覆盖它。或者您可以参考failOnViolation 插件属性的默认表达式,例如mvn -Dpmd.failOnViolation=false install

于 2012-10-25T15:47:40.317 回答
10

我以与我们使用相同的方式使用以下命令skipTests=true

mvn clean install -Dpmd.skip=true 

我们也可以使用 findbugs

-Dfindbugs.skip=true
于 2019-03-22T22:28:12.770 回答