Intellij 2023.3Groovy項目報錯缺陷分享

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 進程中運行編譯器,可以避免啓動額外的進程以及相關的開銷。

請注意,這個屬性的使用可能會影響應用程序的行爲,尤其是在資源利用和性能方面。務必在適當的場景下測試和評估這個屬性對你的應用程序的影響,以確定是否適合在生產環境中使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章