java10下编译lombok注解代码分享
序
本文主要研究下在带有lombok(1.16.20版本)注解的代码在java10下的编译问题。
问题
Fatalerrorcompiling atorg.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216) atorg.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) atorg.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) atorg.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116) atorg.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80) atorg.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) atorg.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128) atorg.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307) atorg.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193) atorg.apache.maven.DefaultMaven.execute(DefaultMaven.java:106) atorg.apache.maven.cli.MavenCli.execute(MavenCli.java:862) atorg.apache.maven.cli.MavenCli.doMain(MavenCli.java:286) atorg.apache.maven.cli.MavenCli.main(MavenCli.java:197) atjava.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod) atjava.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) atjava.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) atjava.base/java.lang.reflect.Method.invoke(Method.java:564) atorg.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) atorg.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) atorg.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) atorg.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) Causedby:org.apache.maven.plugin.MojoExecutionException:Fatalerrorcompiling atorg.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:1086) atorg.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:168) atorg.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134) atorg.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) ...20more Causedby:org.codehaus.plexus.compiler.CompilerException:java.lang.ExceptionInInitializerError atorg.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess(JavaxToolsCompiler.java:173) atorg.codehaus.plexus.compiler.javac.JavacCompiler.performCompile(JavacCompiler.java:174) atorg.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:1075) ...23more Causedby:java.lang.RuntimeException:java.lang.ExceptionInInitializerError atjdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:158) atjdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:96) atjdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:90) atorg.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess(JavaxToolsCompiler.java:126) ...25more Causedby:java.lang.ExceptionInInitializerError atlombok.javac.handlers.HandleGetter.(HandleGetter.java:303) atjava.base/java.lang.Class.forName0(NativeMethod) atjava.base/java.lang.Class.forName(Class.java:374) atlombok.core.SpiLoadUtil$1$1.next(SpiLoadUtil.java:111) atlombok.javac.HandlerLibrary.loadAnnotationHandlers(HandlerLibrary.java:171) atlombok.javac.HandlerLibrary.load(HandlerLibrary.java:156) atlombok.javac.JavacTransformer. (JavacTransformer.java:44) atlombok.javac.apt.LombokProcessor.init(LombokProcessor.java:89) atlombok.core.AnnotationProcessor$JavacDescriptor.want(AnnotationProcessor.java:87) atlombok.core.AnnotationProcessor.init(AnnotationProcessor.java:140) atlombok.launch.AnnotationProcessorHider$AnnotationProcessor.init(AnnotationProcessor.java:69) atjdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$ProcessorState. (JavacProcessingEnvironment.java:674) atjdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors$ProcessorStateIterator.next(JavacProcessingEnvironment.java:771) atjdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:866) atjdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.access$2100(JavacProcessingEnvironment.java:110) atjdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1202) atjdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1311) atjdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1250) atjdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:928) atjdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:100) atjdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:142) ...28more Causedby:java.lang.ClassNotFoundException:com.sun.tools.javac.code.TypeTags atjava.base/java.lang.ClassLoader.findClass(ClassLoader.java:711) atjava.base/java.lang.ClassLoader.loadClass(ClassLoader.java:566) atlombok.launch.ShadowClassLoader.loadClass(ShadowClassLoader.java:422) atjava.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499) atjava.base/java.lang.Class.forName0(NativeMethod) atjava.base/java.lang.Class.forName(Class.java:291) atlombok.javac.JavacTreeMaker$SchroedingerType.getFieldCached(JavacTreeMaker.java:156) atlombok.javac.JavacTreeMaker$TypeTag.typeTag(JavacTreeMaker.java:245) atlombok.javac.Javac. (Javac.java:155) ...49more
解决
这是当前1.16.20版本的问题,通过升级到最新snapshot版本1.16.21即可搞定,1.16.21的版本更新描述如下:
version:1.16.21(2018-03-2911:54:42UTC) v1.16.20isthelateststablereleaseofProjectLombok. PLATFORM:FixforusinglomboktogetherwithJDK9'snewmodule-info.javafeature.Issue#985 PLATFORM:SomeinitialworkonsupportingJDK10. BUGFIX:PotentialfixforNetbeans<9.Issue#1555 PROMOTION:varhasbeenpromotedfromexperimentaltothemainpackagewithnochanges.The'old'experimentaloneisstillaroundbutisdeprecated,andisanaliasforthenewmainpackageone.vardocumentation. OLD-CRUFT:lombok.experimental.Builderandlombok.experimental.Valuearedeprecatedremnantsofwhenthesefeatureswerestillinexperimental.Theyarenowremovedentirely.Ifyourprojectisdependentonanolderversionoflombokwhichstillhasthose;fretnot,lombokstillprocessestheseannotations.Itjustnolongerincludestheminthejar.
本地安装
mvninstall:install-file-Dfile=lombok-1.16.21.jar-DgroupId=org.lombokproject-DartifactId=lombok-Dversion=1.16.21-Dpackaging=jar
更新依赖
org.projectlombok lombok 1.16.21 provided
这样就大功告成了,如果大家在测试的时候还有任何疑问,可以在下方留言区讨论,感谢大家对毛票票的支持。