其他分享
首页 > 其他分享> > idea启动失败 Could not find main class com/intellij/idea/Main

idea启动失败 Could not find main class com/intellij/idea/Main

作者:互联网

背景:

idea2021.1.1

jdk1.8

因为idea在启动项目的时候耗时很长,5分钟左右,于是百度了下idea占用cpu和内存过高的问题,发现有文章是说要更改idea的Runtime Version,

比如: 彻底解决Idea内存消耗严重和CPU资源占比严重的问题 (baidu.com)

intellij idea cpu占用率太大太满 运行速度太慢 使了五个解决方法最终成功_trusause的博客-CSDN博客_idea占用内存过大

 

Choose Runtime,从默认的sdk11改成sdk8,idea自动重启的时候失败了,提示:

---------------------------
Error launching IDEA
---------------------------
Could not find main class com/intellij/idea/Main

搜索了下这个错误,国内文章给的解决方案大多是配置jdk的路径,如 IDEA 启动报错could not find main class com/intellij/idea/main解决办法_人生如戏 全靠演技-CSDN博客

在环境变量里配置IDEA_JDK_64等。

思路其实是对的,只是没能找到启动idea时设置使用的jdk路径的地方。

idea提供了命令行启动的方式,在idea的安装路径下bin目录(和idea64.exe同一个路径)有个idea.bat批处理文件,用cmd或PowerShell执行该bat之后,即能看到启动的详细信息,以PowerShell为例:

PS C:\Users\xxx> cd D:\develop\IDEA\bin
PS D:\develop\IDEA\bin> .\idea.bat
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/intellij/idea/Main has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)
PS D:\develop\IDEA\bin>

报错的意思是com.intellij.idea.Main这个class文件版本号是55.0(对应jdk11),而运行用的jre是52.0(对应jdk8)。

对应关系可以参考我的另一篇文章JDK version和class file version(Class编译版本号)对应关系_lzhfdxhxm的博客-CSDN博客

查看下idea.bat批处理,梳理里面的流程,可以发现使用的jre是有优先级判断的。批处理里就有注释:

:: ---------------------------------------------------------------------
:: Locate a JRE installation directory which will be used to run the IDE.
:: Try (in order): IDEA_JDK, idea%BITS%.exe.jdk, ..\jbr[-x86], JDK_HOME, JAVA_HOME.
:: ---------------------------------------------------------------------

IDEA_JDK这个环境变量我的环境变量里没配置;

idea%BITS%.exe.jdk这个不是环境变量,是指定路径的文件。这个文件是刚才在安装sdk8的时候自动生成/修改的,如下图:

 

idea64.exe.jdk文件的内容:

C:\Users\lzhf\AppData\Roaming\JetBrains\IntelliJIdea2021.1\jdks\jbsdk8u112b287.2_windows_x64

这个路径下就是刚刚安装的jre8

那么问题就简单了,删除idea64.exe.jdk这个文件就好了,这样就会去判断后续的设置(这就相当于Choose Runtime里没有将默认的sdk11改成sdk8)。

如果没有更改过其它设置的话,那么最后使用的jre是idea安装路径下的jre:

D:\develop\IDEA\jbr\bin\java.exe

就这样,idea成功的启动了!

如果有过其它个性化的配置,那么按照idea.bat里的逻辑一层层梳理下来,总能找到自己配置的地方,并加以修复。在过程中,可以打印日志,来辅助判断。

比如在打印出jre最终的值:

 

 

 

标签:java,intellij,URLClassLoader,ClassLoader,IDEA,idea,Main,class
来源: https://blog.csdn.net/lzhfdxhxm/article/details/116999963