mvn test で findbugs と checkstyle を走らせて,1つでも violation があれば fail させるの術
OSS で Java をやっていく場合,ロジックのテストだけではなく checkstyle や findbugs などによる静的解析を適用して,それを CI で回していかないととてもではないがやっていけない!!! という感じになるので,そこら辺を何とかしたい.
具体的に言うと mvn test
でこれらの静的解析をテストと一緒に走らせて,静的解析が1つでも violation を吐き出したら BUILD FAILURE にしたい (もちろんテストがコケても BUILD FAILURE になる).
ということで以下のように pom.xml を記述してやります.
<build> <plugins> ... <!-- findbugs の設定 --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>findbugs-maven-plugin</artifactId> <version>3.0.0</version> <executions> <execution> <phase>test</phase> <goals> <goal>check</goal> </goals> </execution> </executions> <configuration> <effort>Max</effort> <!-- ここらへんは好みに応じて --> <threshold>Low</threshold> <!-- ここらへんは好みに応じて --> <failOnError>true</failOnError> <!-- Error が出た時に build failure にする --> <!-- 以下ファイル出力系なのでお好みで --> <xmlOutput>true</xmlOutput> <outputEncoding>UTF-8</outputEncoding> <xmlOutputDirectory>target/site/findbugs</xmlOutputDirectory> <findbugsXmlOutputDirectory>target/site/findbugs</findbugsXmlOutputDirectory> </configuration> </plugin> <!-- checkstyle の設定 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-checkstyle-plugin</artifactId> <version>2.13</version> <executions> <execution> <phase>test</phase> <goals> <goal>check</goal> </goals> </execution> </executions> <configuration> <!-- checkstyle のポリシーファイルの場所を指定した場合はここに書く.この場合はプロジェクトルートにcheckstyle.xml が置いてある --> <configLocation>checkstyle.xml</configLocation> <violationSeverity>warning</violationSeverity> <!-- warning よりレベルの高い警告を violation にする --> <!-- 以下お好みで --> <encoding>UTF-8</encoding> <consoleOutput>true</consoleOutput> <outputFile>${project.build.directory}/site/checkstyle/checkstyle-result.xml</outputFile> </configuration> </plugin> </plugins> </build>
以上のように書いて,mvn test
を実行すると test -> findbugs -> checkstyle という順で実行されて便利な感じです.
<executions>
の中身と,checkstyle の <violationSeverity>
の中身でちょっとハマってアレでした.<violationSeverity>
の中身はお好みに応じてという感じだと思いますけど,厳格にやっていくなら warning
が妥当ではないかと思った次第.
こうしてやると Travis 等の CI で継続的に回してやることもできるので便利.