java10下编译lombok注解的代码

本文主要研究下在带有lombok(1.16.20版本)注解的代码在java10下的编译问题。

问题

1Fatal error compiling 2 at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216) 3 at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 4 at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 5 at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116) 6 at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80) 7 at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) 8 at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128) 9 at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307) 10 at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193) 11 at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106) 12 at org.apache.maven.cli.MavenCli.execute(MavenCli.java:862) 13 at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:286) 14 at org.apache.maven.cli.MavenCli.main(MavenCli.java:197) 15 at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 16 at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 17 at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 18 at java.base/java.lang.reflect.Method.invoke(Method.java:564) 19 at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) 20 at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) 21 at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) 22 at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) 23Caused by: org.apache.maven.plugin.MojoExecutionException: Fatal error compiling 24 at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:1086) 25 at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:168) 26 at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134) 27 at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) 28 ... 20 more 29Caused by: org.codehaus.plexus.compiler.CompilerException: java.lang.ExceptionInInitializerError 30 at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess(JavaxToolsCompiler.java:173) 31 at org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile(JavacCompiler.java:174) 32 at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:1075) 33 ... 23 more 34Caused by: java.lang.RuntimeException: java.lang.ExceptionInInitializerError 35 at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:158) 36 at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:96) 37 at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:90) 38 at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess(JavaxToolsCompiler.java:126) 39 ... 25 more 40Caused by: java.lang.ExceptionInInitializerError 41 at lombok.javac.handlers.HandleGetter.<clinit>(HandleGetter.java:303) 42 at java.base/java.lang.Class.forName0(Native Method) 43 at java.base/java.lang.Class.forName(Class.java:374) 44 at lombok.core.SpiLoadUtil$1$1.next(SpiLoadUtil.java:111) 45 at lombok.javac.HandlerLibrary.loadAnnotationHandlers(HandlerLibrary.java:171) 46 at lombok.javac.HandlerLibrary.load(HandlerLibrary.java:156) 47 at lombok.javac.JavacTransformer.<init>(JavacTransformer.java:44) 48 at lombok.javac.apt.LombokProcessor.init(LombokProcessor.java:89) 49 at lombok.core.AnnotationProcessor$JavacDescriptor.want(AnnotationProcessor.java:87) 50 at lombok.core.AnnotationProcessor.init(AnnotationProcessor.java:140) 51 at lombok.launch.AnnotationProcessorHider$AnnotationProcessor.init(AnnotationProcessor.java:69) 52 at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$ProcessorState.<init>(JavacProcessingEnvironment.java:674) 53 at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors$ProcessorStateIterator.next(JavacProcessingEnvironment.java:771) 54 at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:866) 55 at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.access$2100(JavacProcessingEnvironment.java:110) 56 at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1202) 57 at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1311) 58 at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1250) 59 at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:928) 60 at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:100) 61 at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:142) 62 ... 28 more 63Caused by: java.lang.ClassNotFoundException: com.sun.tools.javac.code.TypeTags 64 at java.base/java.lang.ClassLoader.findClass(ClassLoader.java:711) 65 at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:566) 66 at lombok.launch.ShadowClassLoader.loadClass(ShadowClassLoader.java:422) 67 at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499) 68 at java.base/java.lang.Class.forName0(Native Method) 69 at java.base/java.lang.Class.forName(Class.java:291) 70 at lombok.javac.JavacTreeMaker$SchroedingerType.getFieldCached(JavacTreeMaker.java:156) 71 at lombok.javac.JavacTreeMaker$TypeTag.typeTag(JavacTreeMaker.java:245) 72 at lombok.javac.Javac.<clinit>(Javac.java:155) 73 ... 49 more

解决

这是当前1.16.20版本的问题,通过升级到最新snapshot版本1.16.21即可搞定,1.16.21的版本更新描述如下:

1version: 1.16.21 (2018-03-29 11:54:42 UTC) 2v1.16.20 is the latest stable release of Project Lombok. 3PLATFORM: Fix for using lombok together with JDK9's new module-info.java feature. Issue #985 4PLATFORM: Some initial work on supporting JDK10. 5BUGFIX: Potential fix for Netbeans < 9. Issue #1555 6PROMOTION: var has been promoted from experimental to the main package with no changes. The 'old' experimental one is still around but is deprecated, and is an alias for the new main package one. var documentation. 7OLD-CRUFT: lombok.experimental.Builder and lombok.experimental.Value are deprecated remnants of when these features were still in experimental. They are now removed entirely. If your project is dependent on an older version of lombok which still has those; fret not, lombok still processes these annotations. It just no longer includes them in the jar.

本地安装

mvn install:install-file -Dfile=lombok-1.16.21.jar -DgroupId=org.lombokproject -DartifactId=lombok -Dversion=1.16.21 -Dpackaging=jar

更新依赖

1 <dependency> 2 <groupId>org.projectlombok</groupId> 3 <artifactId>lombok</artifactId> 4 <version>1.16.21</version> 5 <scope>provided</scope> 6 </dependency>

这样就大功告成了

小结

当前release版本(1.16.20)的lombok在java10下面编译有点小问题,不过可以使用最新的snapshot版本1.16.21来解决。

doc

点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

一篇文章通俗易懂的让你彻底理解 Java 注解

很多Java程序员,对Java的注解一知半解,更有甚者,有的人可能连注解是什么都不知道本文我们用最简单的demo,最通俗最短的语言,带你了解注解到底是什么?先来简单回顾一下基础,我们知道,Java的源文件编辑后,生成.class文件,1..Java源文件,这个是源文件时期2.源文件经过编译生成.class字节码文件,这个也是编译时期3

java 编译时注解框架 lombok

lombokexlombokex是一款类似于lombok的编译时注解框架。编译时注,拥有运行时注解的便利性,和无任何损失的性能。主要补充一些lombok没有实现,且自己会用到的常见工具。创作目的补充lombok缺失的注解,便于日常开发使用。lombok的源码基本

Java自定义注解使用和详解

前言我们在做开发springboot项目时候会遇到各种各样注解,使用各种各样注解,极大的简便了我们开发流程,方式,从JDK5开始支持注解是Java语言的一种强大的功能可以理解为代码上的特殊标记,通过这些标记我们可以在编译,类加载,运行等程序类的生命周期内被读取、执行相应的处理。通过注解开发人员可以在不改变原有代码和逻辑的情况下在源代码中嵌入补充信息自定

Java开发奇技淫巧

lombok 提供了简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的java代码。特别是相对于POJO,有了它妈妈再也不用担心你的Entity啦.             lombok的官方网址:http://projectlombok.org/(https://www.oschina.net/action/GoToLi

Lombok经常用,但是你知道它的原理是什么吗?(二)

在上一篇Lombok经常用,但是你知道它的原理是什么吗?(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fjuejin.im%2Fpost%2F5e54d38a6fb9a07cbf46b3ca)简单介绍了注解处理器,是用来处理编译期的注解的一个工具,我们只是自己生成了一些代码,但是和Lo