2023.3最新版,据悉是对JDK 21的虚拟线程支持更好的,为了体验更加丝滑就升级了。结果一下子就悲催了。看到了下面的报错。
代码语言:javascript复制Executing pre-compile tasks…
Running 'before' tasks
Checking sources
Builder "Groovy stub generator" requested rebuild of module chunk "groovy-reproducer"
Groovyc: While compiling [groovy-reproducer]: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Caused by: java.lang.NoClassDefFoundError: com/intellij/util/containers/IntObjectHashMap$ArrayProducer
at com.intellij.util.lang.java6.ClassPath.<init>(ClassPath.java:39)
at com.intellij.util.lang.java6.UrlClassLoader.createClassPath(UrlClassLoader.java:233)
Caused by: java.lang.ClassNotFoundException: com.intellij.util.containers.IntObjectHashMap$ArrayProducer
at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 14 more
Cannot find class loader for groovyc; optimized=true; sun.misc.Launcher$AppClassLoader@6d06d69c
经过一些搜索和查证,发现这个问题在12月9号已经有人在Intellij官方论坛中提到了,原因是在IJPL-126迁移intellij源代码以使用JDK的标准功能接口,而不是自定义接口。
受影响版本是:
代码语言:javascript复制2023.3 Beta (233.11799.6), 2023.3 Beta 2 (233.11799.30), 2023.3 Beta 3 (233.11799.67), 2023.3 RC (233.11799.196), 2023.3 (233.11799.241)
解决办法3个:
- Intellij降级
- 在设置中shared build process VM option 指定 -Dgroovyc.in.process=true
- 坐等新版,预计12月19号发布
针对方案2中的设置项,补充资料
-Dgroovyc.in.process=true
是 Groovy 编译器的系统属性设置。这个属性用于告知 Groovy 编译器在当前 Java 进程中运行。
Groovy 编译器通常可以作为独立的进程运行,但是通过设置 -Dgroovyc.in.process=true
这个系统属性,编译器会在当前的 Java 进程中运行,而不是作为外部进程启动。
这个属性有助于在某些情况下提高性能和减少资源的消耗,特别是对于需要反复执行 Groovy 编译任务的情况。通过在同一 Java 进程中运行编译器,可以避免启动额外的进程以及相关的开销。
请注意,这个属性的使用可能会影响应用程序的行为,尤其是在资源利用和性能方面。务必在适当的场景下测试和评估这个属性对你的应用程序的影响,以确定是否适合在生产环境中使用。