やりたいこと
Mavenをビルドする際に、下記のような静的解析を実行する。
また、Jenkinsにて解析結果を可視化させる。
- ユニットテストのカバレッジレポーティング
- コードのバグ解析
- コードスタイルの解析
1. Mavenプラグインの設定
1.1 JaCoCo
<!-- プラグインの追加 -->
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.2</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<goals>
<goal>report</goal>
</goals>
</execution>
<execution>
<id>default-check</id>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<!-- reporting設定 -->
<reporting>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<reportSets>
<reportSet>
<reports>
<!-- select non-aggregate reports -->
<report>report</report>
</reports>
</reportSet>
</reportSets>
</plugin>
</plugins>
</reporting>
JaCoCoプラグインを設定後、テストコマンドを実行するとtarget直下にjacoco.execが生成される。
その後、JaCoCoのレポート出力コマンドを実行するとtarget/site/jacoco直下にjacocoのユニットテストのカバレッジレポートのhtmlファイルが生成される。
$ mvn clean test
$ mvn jacoco:report
# 下記コマンドでテスト実行からレポートhtml出力までを一気に行うことも可能
$ mvn jacoco:prepare-agent test jacoco:report
- https://www.jacoco.org/jacoco/trunk/doc/maven.html
- https://www.jacoco.org/jacoco/trunk/doc/examples/build/pom.xml
1.2. FindBugs
<!-- プラグインの追加 -->
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>3.0.5</version>
</plugin>
</plugins>
<!-- reporting設定 -->
<reporting>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<configuration>
<xmlOutput>true</xmlOutput>
<xmlOutputDirectory>target/site</xmlOutputDirectory>
</configuration>
</plugin>
</plugins>
</reporting>
findbugs:findbugsコマンドを実行することで、target直下に実行結果のfindbugsXml.xmlが出力される。
またtargetファルダにfindbugsXml.xmlが出力されている状態でsiteコマンドを実行することで、targe/site直下にhtml形式のレポートが出力される。
※siteコマンドを実行するためにはmaven-site-pluginが必要となるので注意すること。
# findbugsXml.xmlの出力
$ mvn clean test findbugs:findbugs
# htmlファイルの出力
$ mvn site
1.3. Checkstyle
<!-- プラグインの追加 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>validate</id>
<phase>validate</phase>
<configuration>
<!-- プロジェクト直下にスタイル定義を格納し、指定する -->
<configLocation>project-checkstyle.xml</configLocation>
<encoding>UTF-8</encoding>
<consoleOutput>true</consoleOutput>
<failsOnError>true</failsOnError>
<linkXRef>false</linkXRef>
</configuration>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<!-- reporting設定 -->
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<reportSets>
<reportSet>
<reports>
<report>checkstyle</report>
</reports>
</reportSet>
</reportSets>
</plugin>
</plugins>
</reporting>
*<configLocation>*にプロジェクトで使用するスタイル定義を指定する。
Javaプログラムのスタイル定義として「Google Style」と「Sun Style」がある。
それぞれのスタイルの差は【別の方】がまとめているのでそちらを参照すること。実際の開発ではダウンロードしたスタイル定義をプロジェクト独自定義にカスタマイズして利用する。
スタイル定義は以下のリンクからダウンロードする。
※Google StyleのバージョンとCheckstyleのバージョンが一致しない場合、スタイル定義の解析エラーとなることがあるため、利用するバージョンに注意すること。maven-checkstyle-pluginとCheckstyleのバージョン表は【ここ】を参照すること。
checkstyle:checkstyleコマンドを実行することで、スタイルチェック結果がtarget直下にcheckstyle-result.xmlとして生成される。また、target/site直下にhtml形式のレポートが出力される。
$ mvn checkstyle:checkstyle
2. Jenkinsでのジョブレポート出力
2.1. Jenkinsプラグインのインストール
サイドメニューの[Jenkinsの管理]->[プラグインの管理]から[利用可能]タブを選択し、下記のプラグインをインストールする。
2.2. ジョブの設定
2.2.1 シェル実行コマンドの修正
ジョブが「フリースタイル・プロジェクトのビルド」で作成されている場合、ジョブ設定から[ビルド]->[シュルの実行]のシェルスクリプトを下記の通り修正する。パイプラインの場合はJenkinsファイル等のシェルコマンドを修正する。
$ mvn clean package findbugs:findbugs
2.2.2. JaCoCo/FindBugs/Checkstyleレポートの追加設定
Jenkinsジョブにビルド後の処理を追加する。
Jenkinsジョブの設定画面を開き、一番下の[ビルド後の処理の追加]を選択し、下記を追加する。
- JaCoCoカバレッジレポートを記録
- Publish Checkstyle analysis results
- Publish FindBugs analysis results
各プラグインの設定画面が表示されるので、プロジェクト構成に合った設定値を入力する。
JaCoCoの場合、jacoco.execなどのビルド出力ファイルのパスを指定する。
FindBugs/Checkstyleの場合は「集計するファイル」を設定する。
各種プラグインの設定を行わない場合、デフォルト設定されているパスのファイルを集計対象として処理される。
pom.xmlで出力先ファイル名やディレクトリを独自に設定している場合、ファイルのパスを個別に設定すること。
2.2.3. ビルド結果のレポート
各種設定後、ジョブを実行すると下記のようなレポートがビルド結果やジョブのトップ画面に表示される。