Intellij 2023.3Groovy项目报错缺陷分享

2023-12-19 17:41:50 浏览数 (2)

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个:

  1. Intellij降级
  2. 在设置中shared build process VM option 指定 -Dgroovyc.in.process=true
  3. 坐等新版,预计12月19号发布

针对方案2中的设置项,补充资料

-Dgroovyc.in.process=true

是 Groovy 编译器的系统属性设置。这个属性用于告知 Groovy 编译器在当前 Java 进程中运行。

Groovy 编译器通常可以作为独立的进程运行,但是通过设置 -Dgroovyc.in.process=true 这个系统属性,编译器会在当前的 Java 进程中运行,而不是作为外部进程启动。

这个属性有助于在某些情况下提高性能和减少资源的消耗,特别是对于需要反复执行 Groovy 编译任务的情况。通过在同一 Java 进程中运行编译器,可以避免启动额外的进程以及相关的开销。

请注意,这个属性的使用可能会影响应用程序的行为,尤其是在资源利用和性能方面。务必在适当的场景下测试和评估这个属性对你的应用程序的影响,以确定是否适合在生产环境中使用。

0 人点赞