@Data や @Getter を付けたのに error: cannot find symbol symbol: method getName() になるのは、コンパイルのときに Lombok(アノテーションプロセッサー)が動いていないためです。 Lombok はコンパイルの途中で getter・setter を作るので、動かなければ、そのメソッドは存在しません。

いちばん多い原因は、次の3つです。

原因 症状 直し方
JDK 23 以降で、Lombok を依存(クラスパス)に入れただけ JDK 21 では動いていたのに、JDK を上げたら cannot find symbol Maven は annotationProcessorPaths、Gradle は annotationProcessor に Lombok を書く
Gradle で compileOnly だけ書いている JDK の版に関係なく cannot find symbol annotationProcessor も書く
Lombok が、使っている JDK に対応していない ExceptionInInitializerError、TypeTag :: UNKNOWN などで落ちる Lombok を JDK に対応した版に上げる

確認環境:JDK 11・17・21・25、Lombok 1.18.24(Ubuntu の配布版)、Apache Maven 3.9.11(maven-compiler-plugin 3.10.1)、Gradle 8.14.3(確認日 2026年10月11日)。同じソースを JDK と設定を変えてコンパイルしました。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Lombokが効かない原因と直し方|cannot find symbol」

再現:同じコードが、JDK 21 では通り、JDK 25 では通らない

@Data
public class User {
    private String name;
    private int age;
}
User u = new User();
u.setName("佐藤");
System.out.println(u.getName() + " " + u);

Lombok の jar をクラスパスに入れるだけ(javac -cp lombok.jar、Maven の <dependency> だけ)でコンパイルしました。

JDK 結果
11・17 成功
21 成功。ただし下の注意(Note)が表示される
25 cannot find symbol
(JDK 21)
Note: Annotation processing is enabled because one or more processors were found
  on the class path. A future release of javac may disable annotation processing
  unless at least one processor is specified by name (-processor), or a search
  path is specified (--processor-path, --processor-module-path), or annotation
  processing is enabled explicitly (-proc:only, -proc:full).

(JDK 25)
src/demo/Main.java:5: error: cannot find symbol
        u.setName("佐藤");
         ^
  symbol:   method setName(String)
  location: variable u of type User

JDK 21 の注意で予告されていたとおり、JDK 23 からは、クラスパスにあるアノテーションプロセッサーが自動では動かなくなりました。 JDK 23 のリリースノートでも、アノテーション処理は明示的に設定したときだけ動くようになったとされています。

Maven でも同じでした。

(JDK 21) [INFO] BUILD SUCCESS
(JDK 25) [ERROR] .../Main.java:[5,10] cannot find symbol
             symbol:   method setName(java.lang.String)

直し方1:Maven は annotationProcessorPaths に書く

<dependencies>
  <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>${lombok.version}</version>
    <scope>provided</scope>
  </dependency>
</dependencies>

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <configuration>
        <annotationProcessorPaths>
          <path>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
          </path>
        </annotationProcessorPaths>
      </configuration>
    </plugin>
  </plugins>
</build>

依存(<dependency>)と、annotationProcessorPaths の両方に書きます。 Lombok 公式の Maven の設定ページでも、annotationProcessorPaths への追加は「JDK 23 以降では必須」とされています。確認環境でも、JDK 21 ではこの設定で BUILD SUCCESS、JDK 25 では Lombok が動き出しました(下の直し方3へ)。

javac の -proc:full(以前と同じく、クラスパスのプロセッサーを動かす)を compilerArgs に渡す方法でも Lombok は動きましたが、どのプロセッサーを動かすかがはっきりする annotationProcessorPaths のほうがおすすめです。

直し方2:Gradle は annotationProcessor も書く

dependencies {
    compileOnly("org.projectlombok:lombok:1.18.48")
    annotationProcessor("org.projectlombok:lombok:1.18.48")
    testCompileOnly("org.projectlombok:lombok:1.18.48")          // テストでも使うなら
    testAnnotationProcessor("org.projectlombok:lombok:1.18.48")
}
build.gradle.kts 結果(JDK 21)
compileOnly だけ cannot find symbol(JDK 21 でも)
compileOnly + annotationProcessor 成功

Gradle は、compileOnly に書いたものをアノテーションプロセッサーとしては使いません。 JDK の版に関係なく、annotationProcessor が必要です(Lombok 公式の Gradle の設定ページの例も、この4行です)。テストのコードで Lombok を使うなら、testAnnotationProcessor も書きます。

直し方3:Lombok を JDK に対応した版に上げる

annotationProcessorPaths を書いて JDK 25 でコンパイルすると、今度は Lombok 1.18.24 そのものが落ちました。

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.10.1:compile ...
  Fatal error compiling: java.lang.ExceptionInInitializerError: com.sun.tools.javac.code.TypeTag :: UNKNOWN
(javac で直接実行したとき)
An annotation processor threw an uncaught exception.
java.lang.ExceptionInInitializerError
    at lombok.javac.apt.LombokProcessor.placePostCompileAndDontMakeForceRoundDummiesHook(LombokProcessor.java:175)
    ...
Caused by: java.lang.NoSuchFieldException: com.sun.tools.javac.code.TypeTag :: UNKNOWN

Lombok は javac の内部を使うため、新しい JDK にはそれに対応した版の Lombok が必要です。 Lombok 公式の変更履歴では、各 JDK への対応は次の版からです。

JDK 対応した Lombok の版
21 1.18.30
22 1.18.32
23 1.18.36
24 1.18.38
25 1.18.40

lombok と lombok.javac が出てくるスタックトレースや、TypeTag・JCTree などの javac の内部のクラス名が出たら、Lombok の版を疑います。Spring Boot を使っている場合は、Spring Boot が管理している Lombok の版を使うのが手軽です(親の pom・BOM が版を決めている)。

3つの原因の見分け方

エラーの出方 原因
cannot find symbol だけが出る(Lombok の名前は出ない) Lombok が動いていない(設定の不足)
JDK 21 で Annotation processing is enabled because... の Note が出ている 今は動いているが、JDK 23 以降で動かなくなる設定
lombok.javac... のスタックトレース、ExceptionInInitializerError Lombok の版が JDK に対応していない

IDE だけでエラーになるとき

コマンドラインのビルド(mvn compile・gradle build)は通るのに、IDE の画面だけ赤くなる場合は、IDE 側の設定です。

確認すること 内容
IDE がビルドに使う JDK IDE のプロジェクトの JDK と、ビルドツールの JDK が違わないか
アノテーション処理の設定 IDE の設定で、アノテーションプロセッサーが有効になっているか
ビルドの設定の読み込み直し pom.xml・build.gradle を変えたあとに、IDE に読み込み直させたか

確認の手順(チェックリスト)

順番 確認すること 方法
1 JDK の版 mvn -v・gradle -v・java -version。23 以降なら設定が必要
2 Maven の設定 <dependency>(provided)と annotationProcessorPaths の両方
3 Gradle の設定 compileOnly と annotationProcessor の両方(テストは test〜も)
4 Lombok の版 使っている JDK に対応しているか(上の表)
5 エラーの形 cannot find symbol だけ → 設定、lombok.javac のスタックトレース → 版
6 IDE だけのエラー IDE の JDK・アノテーション処理の設定・読み込み直し

よくある質問

Q. JDK 21 で Note が出ていますが、そのままで問題ありませんか。 A. JDK 21 では動きますが、JDK 23 以降に上げると cannot find symbol になります。今のうちに annotationProcessorPaths(Gradle は annotationProcessor)を書いておくと、JDK を上げても止まりません。

Q. 確認環境の Lombok 1.18.24 は、JDK 21 で動いていました。 A. 確認環境では動きましたが、Lombok 公式の変更履歴で JDK 21 への対応が入ったのは 1.18.30 です。JDK 21 以降では、公式に対応した版を使うのが安全です。

まとめ

  • Lombok が動いていないと、getter・setter が作られず cannot find symbol
  • JDK 23 から、クラスパスのアノテーションプロセッサーは自動では動かない。JDK 21 の Note はその予告
  • Maven は annotationProcessorPaths、Gradle は annotationProcessor に Lombok を書く(依存と両方)
  • Gradle は compileOnly だけでは、JDK 21 でも動かない
  • ExceptionInInitializerError・TypeTag :: UNKNOWN は、Lombok がその JDK に対応していない。JDK 25 なら 1.18.40 以降

参考・出典

確認日はいずれも 2026年10月11日です。

  • Oracle「JDK 23 Release Notes」(Annotation processing in javac disabled by default):https://www.oracle.com/java/technologies/javase/23-relnote-issues.html
  • Project Lombok「Maven」:https://projectlombok.org/setup/maven
  • Project Lombok「Gradle」:https://projectlombok.org/setup/gradle
  • Project Lombok「Changelog」:https://projectlombok.org/changelog

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Lombokが効かない原因と直し方|cannot find symbol」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?