Java12でLombok
Lombokが動かない
普段、Spring系のプロジェクトは Spring Initializr のお世話になっているのだが、はて?すべてを理解して使っているだろうかと、素のGradleプロジェクトからシコシコ構築していた。
いつも通り Lombok を導入して Compile したところこんなエラーが。
エラー: 変数nameは、デフォルト・コンストラクタで初期化されていません
おや?
環境
検証した環境は以下の通り。 普段との違いは、Windows環境であることとJavaのバージョンが結構上がってることくらい。
- IntelliJ IDEA IntelliJ IDEA 2019.3.3 (Community Edition)
- jdk-12.0.1
- Windows 10 Professional Edition Version. 1903
コード
エラー対象のコードはこちら。
import lombok.Getter; import lombok.RequiredArgsConstructor; @Getter @RequiredArgsConstructor public class GreetingResponse { private final String name; private final String message; }
Gradleはこちら。
dependencies { implementation "org.springframework.boot:spring-boot-starter-webflux:$springWebfluxVersion" compileOnly "org.projectlombok:lombok:$lombokVersion" testImplementation "org.springframework.boot:spring-boot-starter-test:$springWebfluxVersion" testImplementation 'io.projectreactor:reactor-test' testCompile group: 'junit', name: 'junit', version: '4.12' }
Version情報は以下の通り
springWebfluxVersion = 2.2.5.RELEASE lombokVersion = 1.18.12
Lombok Pluginは導入済み。
Enable annotation processing
は有効済み。
はて?おかしいところはないはずなんだが・・・。
Java12 + Lombok
そういえばJavaのあるバージョン以降(詳しい分岐点を忘れた)、既存のLombok導入ではダメだったのをふと思い出した。 Java12は無罪でした。すいません。追記参照
ざっと検索したところ以下を見つけた。
あたり。
annotationProcessor
にも Lombok を指定してやる必要があった。以下で解決。
dependencies { implementation "org.springframework.boot:spring-boot-starter-webflux:$springWebfluxVersion" compileOnly "org.projectlombok:lombok:$lombokVersion" annotationProcessor "org.projectlombok:lombok:$lombokVersion" // Add ... }
Compile 成功。この辺り細かい違いがあって Migration が面倒そう。
追記
Twitterで「それJava関係ないやで。Gradleの問題やで」と教えてもらった。
Gradle 5.0 からはアノテーションプロセッサをコンパイル時のクラスパスから取得する方法がサポートされなくなるらしい。
なるほど。これですな。
#Mon Mar 09 22:44:33 JST 2020 distributionUrl=https\://services.gradle.org/distributions/gradle-5.2.1-bin.zip distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME
5.2.1 を利用していた。
Java12は無罪でした。ごめんなさい。