2016-05-31 2 views
9

Я хочу расширить sonar.sources, который по умолчанию равен pom.xml,src/main/java, по src/main/resources, чтобы проверить файлы XML, которые находятся там.sonar-maven-plugin: расширение сонара. Источники в многомодульном проекте

Эта, казалось бы, простая задача оказалась сложной, так как у меня есть мультимодульный проект maven (> 100 модулей, вложенных), у многих из которых нет папки src/main/resources, и большинство из них даже не является папкой src (например, для упаковки = pom). Это приводит к ошибке сборки, если я устанавливаю sonar.sources к pom.xml,src/main/java,src/main/resources или pom.xml,src/main:

[ERROR] Failed to execute goal org.codehaus.mojo:sonar-maven-plugin:2.5:sonar (default-cli) on project xyz-parent: The directory 'C:\...\submodule\src\main\resources' does not exist for Maven module ... Please check the property sonar.sources -> [Help 1] 

Сонар-Maven-плагин сам использует ${project.build.sourceDirectory}, чтобы сделать это правильно в каждом модуле.

Я пытался использовать регулярные выражения, чтобы установить sonar.sources в src/main отрезав /java (или \java на Windows) с помощью

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.7</version> 
    <executions> 
    <execution> 
     <id>regex-property</id> 
     <goals> 
     <goal>regex-property</goal> 
     </goals> 
     <configuration> 
     <name>sonar.sources</name> 
     <value>${project.build.sourceDirectory}</value> 
     <regex>[/\\]+java$</regex> 
     <replacement></replacement> 
     <failIfNoMatch>false</failIfNoMatch> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

Но это не делает ничего, и я понятия не имею, к которой жизненный цикл фазы я должен связать его чтобы он выполнялся.

Или есть способ избежать ошибки из-за отсутствия каталога в sonar.sources? Согласно current sonar-maven source недостающие каталоги игнорируются только в том случае, если POM имеет pom, но не для ear или jar модулей без ресурсов.

Должен ли я гарантировать, что src/main существует до запуска сонара? Какой крюк я могу использовать для этого?

ответ

10

Одна из вещей, которые вы можете сделать это:

  • В корневой POM, определяют следующие свойства:
    • sonar.sources быть .
    • sonar.inclusions быть src/main/**
    • => это будет включать все известные файлы, которые SQ находит в ваших модулях в папке src/main, если он существует
  • В ваших модулей, если вы хотите, чтобы лучше контролировать то, что получает, вы просто должны использовать/переопределить sonar.exclusions или sonar.inclusions
+1

Спасибо! Я установил 'sonar.inclusions'' 'pom.xml, src/main/**', и он работает так, как должен. Я думаю, что это будет улучшение для [документации] (http: //docs.sonarqube .org/display/SONAR/Analysis + Parameters), если 'sonar.exclusions' обсуждались не только в контексте [Сужение фокуса] (http://docs.sonarqube.org/display/SONAR/Narrowing+the+Focus). – vboerchers

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