はじめに
Spring Initializrを使ってGradle形式でプロジェクトを作成した場合、どうやってSTS(Eclipse)へインポートするのか逡巡しました。
公式では Buildship 推しのように見えるのですが、Buildshipを使うとannotation processorの設定がまるっと落ちてしまいEclipse上で改めて手動設定が必要になってしまいます。
結局、上記リンク先でも示唆されている通り、 com.diffplug.eclipse.apt
プラグインを利用するのが最も無難なように思われます。(なお、 net.ltgt.apt-eclipse
を薦めている記事などが存在しますが、これはもはやdeprecatedで、代わりにforkしてメンテが続けられているのが com.diffplug.eclipse.apt
らしいです)
手順
Spring Initializr で作成した build.gradle
を開き、冒頭の plugins
セクションに eclipse
と com.diffplug.eclipse.apt
を追加します。
plugins {
id 'org.springframework.boot' version '2.3.2.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'java'
id 'eclipse'
id 'com.diffplug.eclipse.apt' version '3.23.0'
}
次に下記コマンドを実行し、Eclipseのプロジェクト構成ファイル群を生成します。
gradle build cleanEclipse eclipse
eclipse
プラグインは、実行した時点で存在しないディレクトリは無視するようになっているようです。そのため上記では一旦 build
を行って自動生成ディレクトリなどを確実に作成するようにしています。
そして、Eclipseでインポートします。このとき選択するのは Existing Projects into Workspace です。Existing Gradle Projectではないことに注意してください(こちらを選ぶとBuildshipでインポートされ、annotation processorの設定が行われません)。
Gradleの設定を変更した場合は、 gradle cleanEclipse eclipse
コマンドを実行し直し、インポートし直せばよいかと思います。
なお、Gradleが出力するディレクトリ(/build
)と、Eclipseが出力するディレクトリ(/bin
, .apt_generated
など)が異なるのは敢えてそうなっているようです。 Maven を利用し続けてきた身からすると違和感がありますが、問題が起きたときの切り分けのしやすさ的にはこちらの方が良いですよね。
サンプルコード
MapStructを利用し、アノテーションプロセッサにオプションを渡すサンプルです。