如何使CodeNarc强制maven构建失败

时间:2014-09-22 05:09:10

标签: maven groovy codenarc

我试图将CodeNarc整合到基于maven的项目中,并且我遇到了问题。 我想使用自定义规则集,当违反规则时,我希望我的maven构建失败。

如何配置codenarc,以便在运行以下命令时违反规则导致失败?

mvn clean install

此外,在POM中配置CodeNarc的文档并未解释如何引用自定义规则集的位置。有关如何设置的建议吗?谢谢!

当我使用下面的配置运行mvn clean install时(根据我的规则集,我有一个明显违规的groovy文件)

我的构建成功。 :(

我尝试引用自己的规则集,但没有产生任何违规行为。 我在POM中删除了一个rulesetfiles属性,它开始产生违规​​行为。 (但我不能自己选择)

任何人都知道如何让它实际读取自定义规则集文件?我尝试了xml和groovy。

这是我的POM中的规则集和插件配置:

<ruleset xmlns="http://codenarc.org/ruleset/1.0"; 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
    xsi:schemaLocation="http://codenarc.org/ruleset/1.0 http://codenarc.org/ruleset-schema.xsd";
    xsi:noNamespaceSchemaLocation="http://codenarc.org/ruleset-schema.xsd">;

    <description>Dummy rule set</description>

    <rule class='org.codenarc.rule.formatting.SpaceAfterIf'>
        <property name='priority' value='1'/>
    </rule>

    <rule class='org.codenarc.rule.basic.EmptyIfStatement'>
        <property name='priority' value='1'/>
    </rule>
</ruleset>

我在POM中引用了这个规则集,如下所示:

<groupId>org.codehaus.mojo</groupId>
<artifactId>codenarc-maven-plugin</artifactId>
<version>0.18-1</version>
<configuration>
    <sourceDirectory>${basedir}/src/test/groovy</sourceDirectory>
    <maxPriority1Violations>0</maxPriority1Violations>
    <maxPriority2Violations>0</maxPriority2Violations>
    <maxPriority3Violations>0</maxPriority3Violations>
    <rulesetfiles>${basedir}/rulesets/ruleset.xml</rulesetfiles>
    <xmlOutputDirectory>${basedir}/</xmlOutputDirectory>
</configuration>
<executions>
    <execution>
        <id>execution1</id>
        <phase>install</phase>
        <goals>
            <goal>codenarc</goal>
        </goals>
    </execution>
</executions>
     

1 个答案:

答案 0 :(得分:1)

前一段时间我一直在努力。我记得有可能正确运行maven,但我没有这个配置。为什么?因为CodeNarc需要编译你的源代码以执行某些规则。但是codenarc maven插件没有通过类路径,编译失败了。

所以我采用了不同的方法,将CodeNarc作为带有ant任务的测试源运行。它看起来像:

import spock.lang.Specification

class GroovyCodeNarcStaticAnalysisRunner extends Specification {

    private static final GROOVY_FILES = '**/*.groovy'
    private static final ANALYSIS_SCOPE = 'src/main/groovy'
    private static final RULESET_LOCATION = 'file:tools/static-analysis/codenarc.xml'
    private static final HTML_REPORT_FILE = 'target/codenarc-result.html'
    private static final XML_REPORT_FILE = 'target/codenarc-result.xml'

    def 'Groovy code should meet coding standards'() {
        given:
        def ant = new AntBuilder()
        ant.taskdef(name: 'codenarc', classname: 'org.codenarc.ant.CodeNarcTask')

        expect:
        ant.codenarc(
                ruleSetFiles: RULESET_LOCATION,
                maxPriority1Violations: 0,
                maxPriority2Violations: 0,
                maxPriority3Violations: 0)
                {
                    fileset(dir: ANALYSIS_SCOPE) {
                        include(name: GROOVY_FILES)
                    }
                    report(type: 'text') {
                        option(name: 'writeToStandardOut', value: true)
                    }
                    report(type: 'xml') {
                        option(name: 'outputFile', value: XML_REPORT_FILE)
                    }
                    report(type: 'html') {
                        option(name: 'outputFile', value: HTML_REPORT_FILE)
                    }
                }
    }
}

你不需要使用Spock的Specification。任何测试跑步者都可以。在maven方面,足以使用范围 test 配置CodeNarc依赖。