sonar-maven-plugin:在多模块项目中扩展sonar.sources

时间:2016-05-31 11:25:40

标签: java maven sonarqube

我想将sonar.sources(默认为pom.xml,src/main/java)扩展为src/main/resources,以便检查位于那里的XML文件。

这个看似简单的任务变得困难,因为我有一个多模块maven项目(> 100个模块,嵌套),其中很多没有src/main/resources文件夹,其中大部分都没有甚至是src文件夹(例如包装= pom)。如果我将sonar.sources设置为pom.xml,src/main/java,src/main/resourcespom.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]

sonar-maven-plugin本身使用${project.build.sourceDirectory}在每个模块中正确执行。

我尝试使用正则表达式将sonar.sources设置为src/main,方法是通过

切断/java(或Windows上的\java
<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中缺少目录而导致的错误?根据{{​​3}},如果POM包含pom,但只有earjar模块没有资源,则只会忽略丢失的目录。

或者我应该在声纳开始之前确保src/main存在?我可以使用什么钩子?

1 个答案:

答案 0 :(得分:17)

你可以做的一件事:

  • 在根POM中,定义以下属性:
    • sonar.sources.
    • sonar.inclusionssrc/main/**
    • =&GT;这将包括SQ在src/main文件夹中的模块中找到的所有已知文件(如果存在)
  • 在您的模块中,如果您想更好地控制内容,您只需使用/覆盖sonar.exclusionssonar.inclusions