しおしお

IntelliJ IDEAのことなんかを書いてます

IntelliJ IDEA2020.3のEAPにしたらLombok使ってるプロジェクトのビルドができなくなったお話

IntelliJ IDEAのバージョン

2020.3 EAPの以下のビルドバージョン(これより前のビルドからこの問題が発生しています) f:id:sioiri:20201016061218p:plain

再現コード

pom.xml

  <dependencies>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.12</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

コード

public class Main {

    public static void main(String[] args) {
        final Name name = new Name("name");
        System.out.println("name.value = " + name.getValue());
    }
    
    @Value
    static class Name {
        private final String value;
    }

}

ビルド結果

ビルド通るはずのコードなのに、IntelliJ IDEAでビルドするとでエラーになってしまいますね…

lombok-test/src/main/java/Main.java:6:27
java: クラス Main.Nameのコンストラクタ Nameは指定された型に適用できません。
  期待値: 引数がありません
  検出値: java.lang.String
  理由: 実引数リストと仮引数リストの長さが異なります
lombok-test/src/main/java/Main.java:7:50
java: シンボルを見つけられません
  シンボル:   メソッド getValue()
  場所: タイプMain.Nameの変数 name

ビルド時のログには、Lombokのワーニングが出力されています。

java: You aren't using a compiler supported by lombok, so lombok will not work and has been disabled.
  Your processor is: com.sun.proxy.$Proxy30
  Lombok supports: OpenJDK javac, ECJ

対応方法

[BUG] Lombok Does not work with IntelliJ EAP 2020.3 Build 203.4203.26 · Issue #2592 · rzwitserloot/lombok · GitHubにあるるように、 -Djps.track.ap.dependencies=false をオプションで指定するか、Lombokのバージョンを1.18.14に上げるかですね。

Lombokのバージョンを上げられない場合には、↓の手順でオプションを指定してあげます。 f:id:sioiri:20201016065800p:plain

オプションを実行後ビルドを実行すると、↓なワーニングがでますがLombokを使っているコードのビルドは通るようになります。

java: JPS incremental annotation processing is disabled. Compilation results on partial recompilation may be inaccurate. Use build process "jps.track.ap.dependencies" VM flag to enable/disable incremental annotation processing environment.