2014-09-22 5 views
0

Я пытаюсь интегрировать CodeNarc в проект на основе maven, и у меня возникли проблемы. Я хочу использовать пользовательский набор правил, и когда правило нарушено, я хочу, чтобы моя сборка maven завершилась неудачей.Как заставить CodeNarc заставить maven построить сбой

Как настроить кодовое имя так, чтобы нарушения правил приводили к сбою при запуске следующего?

mvn clean install 

Кроме того, документация по настройке CodeNarc в POM не объясняет, как ссылаться, где мой пользовательский набор правил. Любые советы по настройке? Благодаря!

Когда я запустить MVN чистую установку с конфигурациями ниже (у меня есть заводной файл с грубыми нарушениями в соответствии с моим набором правил)

Моя сборка прошла успешно. :(

Я попытался ссылками собственного набора правил и никаких нарушений не были произведены. я забрал rulesetfiles недвижимости в POM и начал производить нарушения. (Но я не получаю, чтобы выбрать мои собственные)

?

Каждый знает, как сделать это на самом деле читать пользовательский набор правил файл, который я пытался как с XML и заводной

Вот мой набор правил и плагин конфигурации из моей 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> 

I refere nced это набор правил в моей 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

Я боролся с тем же некоторое время назад. Я помню, что можно было работать с maven правильно, но у меня нет этой конфигурации. Зачем? Поскольку CodeNarc должен скомпилировать ваши источники для выполнения некоторых правил исполнения. Но плагин codenarc maven не проходит путь к классам, и компиляция не срабатывает.

Итак, я пошел на другой подход, который работает CodeNarc в качестве источника теста с муравьиной задачей. Это выглядит следующим образом:

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) 
        } 
       } 
    } 
} 

Вам не нужно использовать Спок Specification для этого. Любой испытательный бегун будет делать. На стороне maven достаточно сделать зависимость CodeNarc с областью test.

+0

Так что невозможно получить коленарк с настраиваемым набором правил в качестве плагина maven? – Inbl

+0

Насколько я помню, это было возможно для меня, но некоторые из _Enhanced rules_ не срабатывали, потому что плагин CodeNarc maven не передавал баннеры класса. Это может быть зафиксировано до сих пор. Остальные правила работали нормально. – topr

+0

Вы ссылаетесь на свой собственный ruelset fie так же, как и я? Насколько мне известно, он полностью игнорируется. – Inbl

Смежные вопросы