SonarQubeでMavenのMulti-moduleかつMulti-language

SonarQube 4.2からMulti-languageがサポートされました。これにより、例えばJavaJavascriptが1つのMavenプロジェクト内に存在する場合でも、両方の言語の解析結果を見ることができるようになりました。

Multi-languageとして解析するために特別な設定は不要です。sonar.sourcesプロパティに指定されたディレクトリ以下のファイルタイプに応じて、自動的に言語が特定され、対応する品質プロファイルでの解析が行われるようになっています。

ただ、このsonar.sourcesプロパティなのですが、Mavenプロジェクトではデフォルトでsrc/main/java*1になります。結果として「Javaしか解析されないじゃん\(^o^)/」みたいなことになっちゃいます。

対策としては、POMの<properties>要素で、sonar.sourcesプロパティに解析対象としたいディレクトリをカンマ区切りで指定すればOKです。 よくありがちなMavenのwebapp構成では、以下のようにすることでwebapp以下のjs/htmlも解析対象にできます。

<properties>
    <sonar.sources>${project.build.sourceDirectory},${basedir}/src/main/webapp</sonar.sources>
    <sonar.exclusions>
        **/jquery*.js
    </sonar.exclusions>
</properties>

jqueryなど、解析対象としたくないファイルは、sonar.exclusionsでうまいこと除外してください。

<properties>はPOMファイルごとに設定でき、parentを上書きするので、モジュールごとに別々のディレクトリを解析対象とすることができます。

*1:正確には ${project.build.sourceDirectory}