GradleでSpring Bootプロジェクトを作成してSTS(Eclipse)でインポートする手順
   2 min read

はじめに

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 セクションに eclipsecom.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を利用し、アノテーションプロセッサにオプションを渡すサンプルです。