序
本文主要研究下在带有 Lombok (1.16.20 版本) 注解的代码在 Java10 下的编译问题。
问题
خطأ فادح تجميع في org.apache.maven.lifecycle.internal.mojoexecutor.execute (mojoexecutor.java:216) على org.apache.maven.lifecycle.internal.mojoexecutor.execute (mojoexecutor.java:153) at org.apache.maven.lifecycle.internal.mojoexecutor.execute (mojoexecutor.java:145) at org.apache.maven.lifecycle.internal.lifecyclemodulebuilder.buildproject org.apache.maven.lifecycle.internal.lifecyclemoduleBuilder.BuildProject (LifecyClemoduleBuilder.java:80) في org.apache.maven.lifecycle.internal.builder.singlethered.singlethervedbuilder.build org.apache.maven.defaultmaven.doexecute (defaultmaven.java:307) على org.apache.maven.defaultmaven.doexecute (defaultmaven.java:193) في org.apache.maven.defaultmaven.execute org.apache.maven.cli.mavencli.execute (mavencli.java:862) في org.apache.maven.cli.mavencli.domain java.base/jdk.internal.reflect.nativeMethodAccessorImpl.invoke0 (الطريقة الأصلية) في java.base java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (devatingMethodAccessorImpl.java:43) في java.base/java.lang.reflect.method.invoke (method.java:564) at org.codehaus.plexus.classworlds.launcher.launcher.launchenhanced (Launcher.java:289) في org.codehaus.plexus.classworlds.launcher.launcher.launch (Launcher.Java:229) في org.codehaus.plexus.classworlds.launcher.launcher.mainwithexitcode (Launcher.java:415) في org.codehaus.classwworlds.launcher.launcher.main (Launcher.Java:356). التجميع في org.apache.maven.plugin.compiler.abstractcompilermojo.execute (AbstractCompilermojo.java:1086) في org.apache.maven.plugin.compiler.compilermojo.execute (compilermojo.java:168) على org.apache.maven.plugin.defaultbuildpluginmanager.executemojojo (defaultbuildpluginmanager.java:134) في org.apache.maven.lifecycle.internal.moexecutor.execute (mojoexecutor.java:208) ... org.codehaus.plexus.compiler.compilerexception: java.lang.ExceptionInitializerError في org.codehaus.plexus.compiler.javac.javaxtoolscompiler.compileinprocess (javaxtoolscompiler.java:173) org.codehaus.plexus.compiler.javac.javaccompiler.performCompile (javaccompiler.java:174) at org.apache.maven.plugin.compiler.abstractcompilermo.execute (ussectcompilermo. 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.javactaskimpl.call (javactaskimpl.java:90) في org.codehaus.plexus.compiler.javac.javaxtoolscompiler.compileInprocess (javaxtoolscompiler.java:126) ... 25 morecaused by: java.lang.exceptionininitializererror at lombok.javac.handlers.handlet. java.base/java.lang.class.forname0 (الطريقة الأصلية) في java.base lombok.javac.handlerlibrary.loadannotationhandlers (handlerlibrary.java:171) في lombok.javac.handlerlibrary.load (handlerlibrary.java:156) في lombok.javac.javactrorsformer. lombok.javac.apt.lombokprocessor.init (lombokprocessor.java:89) في lombok.core.annotationprocessor $ javacdescriptor.want (innotationprocessor.java:87) في lombok.core.annotationprocessor.init ( lombok.launch.annotationprocessorhider $ anotationprocessor.init (annotationprocessor.java:69) على jdk.compiler/com.sun.tools.javac.processing.javacprocessingenvionment $ processorstate. jdk.compiler/com.sun.tools.javac.processing.javacprocessingenvironment $ discoveredprocessors $ processorStateiterator.next (javacprocessingenvironment.java:771) at jdk.compiler/com.sun.tools.javac.processing.javacprocessingenvironment.discoverandrunprocs (javacprocessingenvironment.java:866) في jdk.compiler/com.sun.tools.javac.processing.javacprocessingenvironment.Access $ 2100 (JavacProcessingenvironment.java:110) at jdk.compiler/com.sun.tools.javac.processing.javacprocessingenvironment $ round.run (javacprocessingenvironment.java:1202) at jdk.compiler/com.sun.tools.javac.processing.javacprocessingenvironment.doprocessing (javacprocessingenvironment.java:1311) في jdk.compiler/com.sun.tools.javac.main.javacompiler.processation jdk.compiler/com.sun.tools.javac.main.javacompiler.compile (javacompiler.java:928) على jdk.compiler/com.sun.tools.javac.javactaskimpl.lambda $ docall $ 0 (javactaskimpl.java. jdk.compiler/com.sun.tools.javac.api.javactaskimpl.handleexceptions (javactaskimpl.java:142) ... 28 morecaused by: java.base/java.lang.classloader.findclass (classloader.java:711) في java.base/java.lang.classloader.loadclass (shadowclasslass java.base/java.lang.classloader.loadclass (classloader.java:499) في java.base lombok.javac.javactreemaker $ schroedingertype.getfieldcached (javactreemaker.java:156) في lombok.javac.javactreemaker $ typetag.typetag
解决
这是当前 1.16.20 版本的问题 , 通过升级到最新 snapshot 版本 1.16.21 即可搞定 , 1.16.21 的版本更新描述如下 :
الإصدار: 1.16.21 (2018-03-29 11:54:42 UTC) V1.16.20 هو أحدث إصدار مستقر من Project Lombok.platform: إصلاح لاستخدام Lombok مع ميزة Module-Info.java الجديدة من JDK9. العدد رقم 985Platform: بعض العمل الأولي على دعم JDK10.Bugfix: الإصلاح المحتمل لـ NetBeans <9. العدد رقم 155555: تم الترويج لـ VAR من التجريبية إلى الحزمة الرئيسية بدون تغييرات. لا يزال الطرف التجريبي "القديم" موجودًا ولكنه تم إهماله ، وهو مستعار للحزمة الرئيسية الجديدة. var documentation.old-cruft: lombok.experimental.builder و lombok.experimental.value هي بقايا مستهلكة عندما كانت هذه الميزات لا تزال في التجريبية. تمت إزالتها الآن بالكامل. إذا كان مشروعك يعتمد على إصدار أقدم من Lombok والذي لا يزال لديه ذلك ؛ الحنق لا ، لومبوك لا يزال يعالج هذه التعليقات التوضيحية. لم يعد يشملهم في الجرة.
本地安装
MVN تثبيت: ملف التثبيت -dfile = lombok -1.16.21.jar -dgroupid = org.lombokproject -dartifactid = lombok -dversion = 1.16.21 -dpackaging = jar
更新依赖
<Rependency> <roupED> org.projectlombok </rougiD> <StifactId> lombok </shintifactid> <sophy> 1.16.21 </version> <scope> متوفر </scope> </dependency>
这样就大功告成了 , 如果大家在测试的时候还有任何疑问 , 可以在下方留言区讨论 , 感谢大家对武林网的支持。