Java16环境下Eclipse jee-2021-03安装Lombok 1.18.20报错解决
Eclipse 2021-03(Java 16环境)安装Lombok 1.18.20失败解决方案
异常表现
- 手动将Lombok 1.18.20 jar包放置到Eclipse安装目录后,打开类文件时报错,项目构建抛出
Java Builder运行异常 Help -> About Eclipse IDE页面无Lombok已安装标识
错误日志
eclipse.buildId=4.19.0.I20210303-1800 java.version=16.0.1 java.vendor=Oracle Corporation BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=tr_TR Framework arguments: -product org.eclipse.epp.package.jee.product Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product org.eclipse.jdt.core Error Wed Jun 09 03:17:25 TRT 2021 Errors running builder 'Java Builder' on project 'northwind'. java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @75ad30c1 at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:357) at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297) at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199) at java.base/java.lang.reflect.Method.setAccessible(Method.java:193) at org.eclipse.osgi.internal.loader.ModuleClassLoader.overrideLoadResult(ModuleClassLoader.java:86) at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519) at org.eclipse.jdt.internal.compiler.parser.Parser.endParse(Parser.java:11687) at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:12880) at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:13104) at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:13061) at org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Parser.java:11448) at org.eclipse.jdt.internal.compiler.Compiler.internalBeginToCompile(Compiler.java:850) at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:394) at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:444) at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:426) at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:377) at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.compile(BatchImageBuilder.java:214) at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:309) at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:79) at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:272) at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:192) at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:846) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:229) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:277) at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:330) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:333) at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:385) at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:406) at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:154) at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:244) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
根因说明
Java 9引入模块系统后,默认限制了第三方程序通过反射访问JDK内部API的权限,Java 16更是将非法反射访问的默认策略从警告调整为直接拒绝。Lombok运行时需要通过反射调用java.lang.ClassLoader的defineClass方法完成代码增强,被Java 16的模块访问控制拦截,因此抛出访问异常,导致Lombok未正常加载。
解决方案
找到Eclipse安装目录下的eclipse.ini配置文件,在-vmargs参数行的下方添加如下配置:
--illegal-access=permit
保存文件后重启Eclipse即可,重启后可在Help -> About Eclipse IDE页面确认Lombok标识正常显示,项目构建和类文件打开也不会再抛出异常。
内容的提问来源于stack exchange,提问作者ali
相关产品推荐
相关产品推荐

