IDEA JVM ClassLoader 错误
错误日志:
1 | OpenJDK 64-Bit Server VM warning: Archived non-system classes are disabled because the java.system.class.loader property is specified (value = "com.intellij.util.lang.PathClassLoader"). To use archived non-system classes, this property must not be set |
我的 JVM 运行参数
1 | /Users/shaolongfei/Library/Java/JavaVirtualMachines/corretto-18.0.2/Contents/Home/bin/java -Xmx512m -Xms256m -ea -Didea.config.path=/Users/shaolongfei/Library/Caches/JetBrains/IntelliJIdea2023.1/plugins-sandbox/config -Didea.system.path=/Users/shaolongfei/Library/Caches/JetBrains/IntelliJIdea2023.1/plugins-sandbox/system -Didea.plugins.path=/Users/shaolongfei/Library/Caches/JetBrains/IntelliJIdea2023.1/plugins-sandbox/plugins -Didea.classpath.index.enabled=false -Djdk.module.illegalAccess.silent=true -Djava.system.class.loader=com.intellij.util.lang.PathClassLoader --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.ref=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.text=ALL-UNNAMED --add-opens=java.base/java.time=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.base/jdk.internal.vm=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/sun.nio.fs=ALL-UNNAMED --add-opens=java.base/sun.security.ssl=ALL-UNNAMED --add-opens=java.base/sun.security.util=ALL-UNNAMED --add-opens=java.desktop/com.apple.eawt=ALL-UNNAMED --add-opens=java.desktop/com.apple.eawt.event=ALL-UNNAMED --add-opens=java.desktop/com.apple.laf=ALL-UNNAMED --add-opens=java.desktop/java.awt=ALL-UNNAMED --add-opens=java.desktop/java.awt.dnd.peer=ALL-UNNAMED --add-opens=java.desktop/java.awt.event=ALL-UNNAMED --add-opens=java.desktop/java.awt.image=ALL-UNNAMED --add-opens=java.desktop/java.awt.peer=ALL-UNNAMED --add-opens=java.desktop/java.awt.font=ALL-UNNAMED --add-opens=java.desktop/javax.swing=ALL-UNNAMED --add-opens=java.desktop/javax.swing.plaf.basic=ALL-UNNAMED --add-opens=java.desktop/javax.swing.text.html=ALL-UNNAMED --add-opens=java.desktop/sun.awt.datatransfer=ALL-UNNAMED --add-opens=java.desktop/sun.awt.image=ALL-UNNAMED --add-opens=java.desktop/sun.awt=ALL-UNNAMED --add-opens=java.desktop/sun.font=ALL-UNNAMED --add-opens=java.desktop/sun.java2d=ALL-UNNAMED --add-opens=java.desktop/sun.lwawt=ALL-UNNAMED --add-opens=java.desktop/sun.lwawt.macosx=ALL-UNNAMED --add-opens=java.desktop/sun.swing=ALL-UNNAMED --add-opens=jdk.attach/sun.tools.attach=ALL-UNNAMED --add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-opens=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED --add-opens=jdk.jdi/com.sun.tools.jdi=ALL-UNNAMED -Didea.required.plugins.id=com.jiyuanime.ActivatePowerModeApplicationPlugin -Dapple.laf.useScreenMenuBar=true -Dapple.awt.fileDialogForDirectories=true -Didea.plugin.in.sandbox.mode=true "-javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=61523:/Applications/IntelliJ IDEA.app/Contents/bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath "/Applications/IntelliJ IDEA.app/Contents/lib/log4j.jar:/Applications/IntelliJ IDEA.app/Contents/lib/jdom.jar:/Applications/IntelliJ IDEA.app/Contents/lib/trove4j.jar:/Applications/IntelliJ IDEA.app/Contents/lib/openapi.jar:/Applications/IntelliJ IDEA.app/Contents/lib/util.jar:/Applications/IntelliJ IDEA.app/Contents/lib/util_rt.jar:/Applications/IntelliJ IDEA.app/Contents/lib/bootstrap.jar:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar:/Applications/IntelliJ IDEA.app/Contents/lib/idea.jar:/Applications/IntelliJ IDEA.app/Contents/lib/3rd-party-rt.jar:/Applications/IntelliJ IDEA.app/Contents/lib/jna.jar" com.intellij.idea.Main |
当时是为了开发一个 IDEA 的插件,我是直接以当时最新的 IDEA 为基础开发的,在 2023.1 版本之上,这个版本 IDEA SDK 的 jdk 要求是 17 及以上,运行环境是 mac M1 pro 的芯片,所以下载的是 64 位的 jdk。
我修改 IDEA 的 JVM 运行版本为 open jdk 20 也不行,按 command+shift+a ,搜索 Choose Boot Java Runtime for the IDE 的 action 进行运行就可以修改,这玩意最好还是别改吧,尽量用 jetbrian 的 jdk。
改了之后出现
1 | No manual entry for Choose Boot Java Runtime for the IDE;type=a |
出现这个之后你就无法再次修改 IDEA 的 JVM 了,你会发现 IDEA 很多功能用不了了,因为修改 IDEA 的 JVM 是非常不推荐的做法,除非出现特殊问题,jetbrain 要求你这么做。
不过我有修复的办法,打开 /Applications/IntelliJ IDEA.app/Contents/bin
这个路径,找到 repair 这个脚本,运行它,根据提示选择 yes 或者 no 就好了,它可以检测出来你的 JVM 进行了修改,问你是否已经进行 reset,选择 yes,然后重启下 IDEA 就好了。
找了很多方式去修改 jvm 运行参数,但是都无法生效,不知道为什么,修改 idea.vmoptions 并不会改变 jvm 的运行参数,报错依旧。
换一种思路,既然报错是由于 -Djava.system.class.loader=”com.intellij.util.lang.PathClassLoader” 参数导致的,我们又改不了,那就顺着它来,修改 IDEA SDK 所使用的 jdk 版本,但是你会发现它是无法选择 IDEA 自带的 jdk 的,非常傻叉!那个路径是灰色的,不让我选,既然这样,我就拷贝出来一份,重命名一下,就可以选了,搞定。拷贝 /Applications/IntelliJ IDEA.app/Contents/jbr 到 /Users/shaolongfei/Library/Java/JavaVirtualMachines/jbr-17 ,然后让 IDEA SDK 依赖它就好了。