SonarQubeでJavaのコードを解析する(Maven編)
SonarQubeでは複数の方法でコード解析を実行することが出来ます。
MavenもしくはGradleで管理されたプロジェクトでは、それぞれ対応するプラグインを利用するのが最も簡単かと思います。また、Jenkins等のCI環境があれば、そちらにプラグインを入れて実行することもできます。
コード行数が増えてくるとそれなりに解析に時間もかかりますし、個人的にはJenkinsプラグインでの実行がお勧めです。
この記事では、手始めとして、最も簡単なMavenプラグインを使った方法を紹介します。
SonarQube Maven Pluginを使って解析を実行する
SonarQube Maven Pluginのsonar
ゴールで解析を行うことが出来ます。POMファイルは特に編集しなくても、以下のコマンドで実行可能です。
mvn sonar:sonar
SonarQubeサーバがローカルの9000番ポートで上がっていて、デフォルトであるH2をデータベースとして使っているのであれば、本当にこれだけで解析が実行されます。
SonarQubeサーバがリモートにあり、データベースもMySQL等他の製品を利用している場合は、以下の設定を追加してくだい。
キー | 設定する内容 | 値の例 |
---|---|---|
sonar.host.url | SonarQubeサーバのURL。ブラウザでトップページを表示する際のアドレスと同じ値を指定する。 | http://localhost:9000 |
sonar.jdbc.url | SonarQubeが参照するデータベースに接続するためのJDBC URL。 | jdbc:mysql://localhost:3306/sonar |
sonar.jdbc.username | データベースに接続するためのユーザ名 | sonar |
sonar.jdbc.password | データベースに接続するためのパスワード | sonar |
長いので省略してしまいましたが、MySQLのJDBCドライバを使用するときは、JDBCのバッチ実行を高速化するため rewriteBatchedStatements=true
を付けた方がよいです。
各データベース製品におけるJDBC設定の具体例は、SonarQube Maven Pluginのページを参照してください。
Sonarが利用するデータベースとはいえ、パスワードをPOMに記載するのははばかられるため、sonar.jdbc.username
等の設定はsettings.xml
に指定するか、毎回実行時に-Dsonar.jdbc.url=xxx
の形で指定するとよいでしょう。
とりあえず実行するだけであれば、これだけでおしまいです。SonarQubeがデフォルトで持っているルールを使い、Javaコードの静的解析が行われ、結果が蓄積されています。 ブラウザでSonarQubeサーバに接続すれば、解析結果を見ることができます。