SonarQubeでMavenのMulti-moduleかつMulti-language
SonarQube 4.2からMulti-languageがサポートされました。これにより、例えばJavaとJavascriptが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}