FunTester Intellij 2023.3Groovy 项目报错缺陷分享

FunTester · 2023年12月19日 · 1681 次阅读

2023.3 最新版,据悉是对 JDK 21 的虚拟线程支持更好的,为了体验更加丝滑就升级了。结果一下子就悲催了。看到了下面的报错。

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 的标准功能接口,而不是自定义接口。

受影响版本是:

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 进程中运行编译器,可以避免启动额外的进程以及相关的开销。

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

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册