【无标题】
项目场景:
今天在编译java项目的时候遇到如下问题
java: java.lang.ExceptionInInitializerError
java.lang.RuntimeException: java.lang.ExceptionInInitializerError
at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.invocationHelper(JavacTaskImpl.java:168)
at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:100)
at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:94)
at org.jetbrains.jps.javac.JavacMain.compile(JavacMain.java:299)
at org.jetbrains.jps.javac.JavacMain.compile(JavacMain.java:64)
at org.jetbrains.jps.javac.ExternalJavacProcess.compile(ExternalJavacProcess.java:191)
at org.jetbrains.jps.javac.ExternalJavacProcess.access400(ExternalJavacProcess.java:30)atorg.jetbrains.jps.javac.ExternalJavacProcess400(ExternalJavacProcess.java:30) at org.jetbrains.jps.javac.ExternalJavacProcess400(ExternalJavacProcess.java:30)atorg.jetbrains.jps.javac.ExternalJavacProcessCompilationRequestsHandler1.run(ExternalJavacProcess.java:264)atjava.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090)atjava.base/java.util.concurrent.ThreadPoolExecutor1.run(ExternalJavacProcess.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) at java.base/java.util.concurrent.ThreadPoolExecutor1.run(ExternalJavacProcess.java:264)atjava.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090)atjava.base/java.util.concurrent.ThreadPoolExecutorWorker.run(ThreadPoolExecutor.java:614)
at java.base/java.lang.Thread.run(Thread.java:1474)
Caused by: java.lang.ExceptionInInitializerError
at lombok.javac.apt.LombokProcessor.placePostCompileAndDontMakeForceRoundDummiesHook(LombokProcessor.java:175)
at lombok.javac.apt.LombokProcessor.init(LombokProcessor.java:97)
at lombok.core.AnnotationProcessorJavacDescriptor.want(AnnotationProcessor.java:160)atlombok.core.AnnotationProcessor.init(AnnotationProcessor.java:213)atlombok.launch.AnnotationProcessorHiderJavacDescriptor.want(AnnotationProcessor.java:160) at lombok.core.AnnotationProcessor.init(AnnotationProcessor.java:213) at lombok.launch.AnnotationProcessorHiderJavacDescriptor.want(AnnotationProcessor.java:160)atlombok.core.AnnotationProcessor.init(AnnotationProcessor.java:213)atlombok.launch.AnnotationProcessorHiderAnnotationProcessor.init(AnnotationProcessor.java:64)
at org.jetbrains.jps.javac.APIWrappers$ProcessorWrapper.init(APIWrappers.java:213)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:565)
at org.jetbrains.jps.javac.APIWrappers1.invoke(APIWrappers.java:388)atjdk.proxy2/jdk.proxy2.1.invoke(APIWrappers.java:388) at jdk.proxy2/jdk.proxy2.1.invoke(APIWrappers.java:388)atjdk.proxy2/jdk.proxy2.Proxy7.init(Unknown Source)
at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironmentProcessorState.<init>(JavacProcessingEnvironment.java:635)atjdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironmentProcessorState.<init>(JavacProcessingEnvironment.java:635) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironmentProcessorState.<init>(JavacProcessingEnvironment.java:635)atjdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironmentDiscoveredProcessorsProcessorStateIterator.next(JavacProcessingEnvironment.java:761)atjdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:857)atjdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironmentProcessorStateIterator.next(JavacProcessingEnvironment.java:761) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:857) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironmentProcessorStateIterator.next(JavacProcessingEnvironment.java:761)atjdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:857)atjdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironmentRound.run(JavacProcessingEnvironment.java:1188)
at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1301)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1262)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:938)
at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall0(JavacTaskImpl.java:104)atjdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.invocationHelper(JavacTaskImpl.java:152)...10moreCausedby:java.lang.NoSuchFieldException:com.sun.tools.javac.code.TypeTag::UNKNOWNatlombok.permit.Permit.getField(Permit.java:144)atlombok.javac.JavacTreeMaker0(JavacTaskImpl.java:104) at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.invocationHelper(JavacTaskImpl.java:152) ... 10 more Caused by: java.lang.NoSuchFieldException: com.sun.tools.javac.code.TypeTag :: UNKNOWN at lombok.permit.Permit.getField(Permit.java:144) at lombok.javac.JavacTreeMaker0(JavacTaskImpl.java:104)atjdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.invocationHelper(JavacTaskImpl.java:152)...10moreCausedby:java.lang.NoSuchFieldException:com.sun.tools.javac.code.TypeTag::UNKNOWNatlombok.permit.Permit.getField(Permit.java:144)atlombok.javac.JavacTreeMakerSchroedingerType.getFieldCached(JavacTreeMaker.java:171)
at lombok.javac.JavacTreeMaker$TypeTag.typeTag(JavacTreeMaker.java:259)
at lombok.javac.Javac.(Javac.java:185)
… 29 more
原因分析:
这个 ExceptionInInitializerError 核心原因是:Lombok 版本与你当前使用的 JDK 版本不兼容。
具体来看,异常栈中 NoSuchFieldException: com.sun.tools.javac.code.TypeTag :: UNKNOWN 表明 Lombok 试图访问 JDK 内部的 TypeTag.UNKNOWN 字段,但该字段在你使用的 JDK 版本中不存在(常见于 JDK 17+/Lombok 版本过低的场景)。
解决方案:
确保使用兼容当前 JDK 版本的 Lombok 版本:
JDK 8:Lombok 1.18.x 全系列兼容
JDK 11/17:建议使用 Lombok 1.18.20+(最优为 1.18.30+)
JDK 21:建议使用 Lombok 1.18.32+
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version> <!-- 升级到高版本 -->
<scope>provided</scope>
</dependency>
<!-- 同时确保 Lombok 插件版本匹配 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>17</source> <!-- 匹配你的 JDK 版本 -->
<target>17</target>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version> <!-- 与依赖版本一致 -->
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)