序
本文主要研究下在带有 Lombok (1.16.20 版本) 注解的代码在 Java10 下的编译问题。
问题
Фатальная ошибка, компиляция org.apache.maven.lifecycle.internal.mojoexecutor.execute (mojoexecutor.java:216) at org.apache.maven.lifecycle.internal.mojoexecutor.execute (mojoexecutor.java: org.apache.maven.lifecycle.internal.mojoexecutor.execute (mojoexecutor.java:145) на org.apache.maven.lifecycle.internal.lifecyclemodulebuilder.buildproj org.apache.maven.lifecycle.internal.lifecyclemodulebuilder.buildProject (LifeCyclemoduleBuilder.java:80) в org.apache.maven.lifecycle.internal.builder.singleThreaded.singleThreadedBuilder.Build (SingleThreadedBuilder.java:51) atrg.apache.maven.lifecycle.internal.lifecyclestarter.execute (lifecyclestarter.javes org.apache.maven.defaultmaven.doexecute (defaultmaven.java:307) на org.apache.maven.defaultmaven.doexecute (defaultmaven.java:193) на org.apache.maven.defaultmaven.execut org.apache.maven.cli.mavencli.execute (mavencli.java:862) на org.apache.maven.cli.mavencli.domain (mavencli.java:286) на org.apache.maven.cli.mavencli.main (mavencli.java. java.base/jdk.internal.reflect.nativemethodaccessorimpl.invoke0 (нативный метод) на java.base/jdk.internal.reflect.nativemethodaccessormpl.invoke (nativemethodaccesscorimpl.java:62) у java.base/jdk.internal.reflect.delegatingmethodaccessorimpl.invoke (делегирование Methodacccessorimpl.java:43) на java.base/java.lang.reflect.method.invoke (Method.java:564) у org.codehaus.plexus.classworlds.launcher.launcher.launchenhand org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)Caused by: org.apache.maven.plugin.MojoExecutionException: Fatal ошибка компиляции на org.apache.maven.plugin.compiler.abstractcompilermojo.execute (AbstractCompilermojo.java:1086) на org.apache.maven.plugin.compiler.compilermojo.execut org.apache.maven.plugin.defaultbuildpluginmanager.executemojo (defaultbuildpluginmanager.java:134) на org.apache.maven.lifecycle.internal.mojoexecutor.execute (mojoexecutor.java:208) ... Morecator.execute (mojoexecutor.java:208) ... 20. org.codehaus.plexus.compiler.compilerexception: java.lang.exceptionInitializererRor на org.codehaus.plexus.compiler.javac.javaxtoolscompiler.compileinprocess (javaxtoolscompiler.java:173) at at at at at at at at at at at at at at org.codehaus.plexus.compiler.javac.javaccompiler.performcompile (javaccompiler.java:174) на org.apache.maven.plugin.compiler.abstractcompilermojo.execute (AbstractCompilermojo.java:1075) ... 23 MorecaUte. java.lang.runtimeexception: java.lang.exceptionInitializererRor на jdk.compiler/com.sun.tools.javac.api.javactaskimpl.handleexceptions (javactaskimpl.java:158) в jdk.compiler/com.sun.tools.javac.api.javactaskimpl.docall (javactaskimpl.java:96) на jdk.compiler/com.sun.tools.javac.api.javactaskimpl.call (javactaskimpl.javaca.api.javactaskimpl. org.codehaus.plexus.compiler.javac.javaxtoolscompiler.compileinprocess (javaxtoolscompiler.java:126) ... 25 MoreCaUsed by: java.lang.exceptionInitializerError at lombok.javac.handlers.handleger. java.base/java.lang.class.forname0 (родной метод) по адресу java.base/java.lang.class.forname (class.java:374) по адресу lombok.core.spiloadutil $ 1 $ 1.next (spiloadutil.java:111) у lombok.javac.handlerlibrary.loadAnantationHandlers (HandlerLibrary.java:171) по адресу lombok.javac.handlerlibrary.load (Handlerlibrary.java:156) на Lombok.javac.javactransformer. lombok.javac.apt.lombokprocessor.init (lombokprocessor.java:89) по адресу lombok.core.annotationprocessor $ javacdescriptor.want (annotationprocessor.java:87) на lombok.core.annotationprocessor.init.init.init.init.Init.Init.Init.Init.Init.Init.Init.Init.Init.Init.Init.Init.Init.Init.Init.Init.Init.Init.Init.Init.Init.Init.Init.Init.Init.Init.Init.init lombok.launch.annotationprocessorhesshider $ annotationprocessor.init (annotationprocessor.java:69) на jdk.compiler/com.sun.tools.javac.processing.javacprocessingenverment $ processorstate. jdk.compiler/com.sun.tools.javac.processing.javacspocessingenvironment $ discoveredprocessors $ processorstateiterator.next (javacprocessingenvironment.java:771) на jdk.compiler/com.sun.tools.javac.processing.javacpocessingenvironment.discoverandrunprocs (javacprocessingenvironment.java:866) в jdk.compiler/com.sun.tools.javac.processing.javacspocessingenvironment.access $ 2100 (javacpocessingenvironment.java:110) на jdk.compiler/com.sun.tools.javac.processing.javacpocessingenvironment $ round.run (javacpocessingenvironment.java:1202) на jdk.compiler/com.sun.tools.javac.processing.javacprocessingenvironment.dopocessing (javacprocessingenvironment.java:1311) на jdk.compiler/com.sun.tools.javac.main.javacompiler.processannotation jdk.compiler/com.sun.tools.javac.main.javacompiler.compile (javacompiler.java:928) по адресу jdk.compiler/com.sun.tools.javac.api.javactaskimpl.lambda $ docall. jdk.compiler/com.sun.tools.javac.api.javactaskimpl.handleexceptions (javactaskimpl.java:142) ... 28 morecabened: java.lang.classnotfoundexception: com.sun.tools. java.base/java.lang.classloader.findclass (classloader.java:711) по адресу java.base/java.lang.classloader.loadclass (classloader.java:566) на lombok.launch.shadowclassloarder.loadclas java.base/java.lang.classloader.loadclass (classloader.java:499) на java.base/java.lang.class.forname0 (родной метод) на java.base/java.lang.class.forname (class.java:291) у lombok.javac.javactreemaker $ schroedingertype.getfieldcached (javactreemaker.java:156) по адресу lombok.javac.javactreemaker $ typetag.typetag (javactremaker.java:245) на Lombok.javac.javac.
解决
这是当前 1.16.20 版本的问题 , 通过升级到最新 Снимок 版本 1.16.21 即可搞定 , 1.16.21 的版本更新描述如下 :
Версия: 1.16.21 (2018-03-29 11:54:42 UTC) v1.16.20-это последний стабильный выпуск Project Lombok.Platform: Fix для использования Lombok вместе с новым модулем JDK9-info.java. Выпуск № 985PLATFORM: Некоторая начальная работа по поддержке JDK10.Bugfix: Потенциальное исправление для NetBeans <9. Выпуск № 1555PROMOTION: VAR был продвинут от эксперимента до основного пакета без изменений. «Старый» экспериментальный все еще рядом, но устарел, и является псевдонимом для нового основного пакета. var Documentation.ald-Cruft: Lombok.Experimental.Builder и Lombok.Experimental.value-это устаревшие остатки, когда эти особенности все еще были в экспериментальных. Теперь они полностью удалены. Если ваш проект зависит от более старой версии Lombok, у которой все еще есть; Не волнуйтесь, Ломбок все еще обрабатывает эти аннотации. Это просто больше не включает их в банку.
本地安装
Установка MVN: install -file -dfile = lombok-1.16.21.jar -dgroupid = org.lombokproject -dartifactid = lombok -dervision = 1.16.21 -dpackaging = jar
更新依赖
<dependency> <groupid> org.projectlombok </GroupId> <artifactid> lombok </artifactid> <sersive> 1.16.21 </version> <cracpe>
这样就大功告成了 , 如果大家在测试的时候还有任何疑问 可以在下方留言区讨论 , 感谢大家对武林网的支持。