Gradleプラグイン/アノテーションプロセッシング調査
   3 min read

元々JBoss/WildFlyの流れで開発してきたのでずっとMavenを利用してきたのですが、今度のプロジェクトではGradleを使うことに決まったようで、新しい知識が必要となりました。

特にMavenで利用していたプラグインと同等のものがあるかどうかを調べる必要を感じたので調査しました。

結論としては、これまで利用してきた静的解析系のプラグインは同じようなものがあり、問題なさそう、という感触です。

ただし、buildshipという、Eclipseに組み込まれている Gradle → Eclipse プロジェクト変換ツール(Mavenでいうところのm2eみたいなもの)の機能が不十分で、Gradle + Eclipse という組み合わせでは使わない方が良さそうです。 (Gradleを使いたいのならIntelliJなどを利用し、Eclipseが使いたいのならMavenを利用する)

プラグイン

formatter

Mavenでは formatter-maven-plugin を利用していました。

これは、Eclipseに組み込まれているフォーマッタをMavenプラグインとして利用できるようにしたもので、設定ファイルもEclipseのものを読み込め、IDEと設定を共通化できるのが強みです。 (IDEと外部フォーマッタの挙動が少しでも違っているとかなりストレスを感じますよね)

GradleでEclipseのフォーマッタ設定を流用できそうなものとしては spotless というものがあるようです。

spotbugs

spotbugsコミュニティが提供しているみたいです。

その他プラグイン

今まで利用したことがないが、今回の調査中に見つけた、有用そうなプラグイン。

Error Prone

Google製Spotbugs(?)。 Gradleプラグインは第三者が開発しているものを利用するようです。

アノテーションプロセッシング

気になっているのは処理する順番を明示的に設定できるのかどうかという点。 MavenでMapStructとLombokを併用する場合も問題になったが、Gradleではどうなのか。

結論としては、 ここ にあるような書き方で行けそうなんじゃないかな、と。

dependencies {
    annotationProcessor "org.mapstruct:mapstruct-processor:${mapstructVersion}", "org.projectlombok:lombok:${lombokVersion}"
}

やってみたところ、コマンドラインからは上手く行っているように見えます。

ただし、Eclipseで操作するとMapStructアノテーションプロセッシングが動作しません。おそらく以下のissueが関連しています。

また、ビルド結果が build ディレクトリでなく bin ディレクトリに出力されたりと、統合具合が Maven(m2e)と比較して低い感じを受けました。