IntelliJ IDEA配置Java10后构建运行报错,是否为Bug?
先说说你碰到的 Error: Could not find or load main class 搭配 ClassNotFoundException 的错误——这个大概率不是IDE的Bug,90%以上的情况都是运行配置或者编译输出环节出了问题,咱们一步步排查:
检查运行配置的主类指定:
打开Run -> Edit Configurations,找到你用来运行的Application配置,确认Main class字段选的是你要启动的类,而且是全限定类名(比如com.yourpackage.YourMainClass)。如果是手动输入的,仔细检查拼写,别漏了包名或者写错类名。验证模块编译输出路径:
去File -> Project Structure -> Modules,选中你的模块切换到Paths标签,看看Output directory和Test output directory是不是有效路径,有没有读写权限。如果路径不存在或者IDE没权限写入,编译后的class文件就生成不了,自然找不到主类。全量重建项目:
试试Build -> Rebuild Project,有时候增量编译会残留旧缓存或者漏掉某些文件,全量重建能清空缓存重新编译所有代码,很多奇怪的小问题都能这么解决。
再说说你怀疑的JDK配置问题——模块里指定了JDK10但还是有问题,这基本不是Bug,核心要确保所有层级的JDK配置统一:
项目全局JDK检查:
打开File -> Project Structure -> Project,确认Project SDK选的是JDK10,同时Project language level要设为Java 10(别选成更高或者更低的版本)。模块的JDK配置会继承项目全局,但如果全局配置不对,模块设置也白搭。运行配置的JRE指定:
回到Edit Configurations,每个运行配置的JRE字段要选Project SDK(也就是你配置的JDK10),别不小心选成了其他版本的JRE,这会导致运行时环境和编译环境不匹配。编译器字节码版本设置:
去File -> Settings -> Build, Execution, Deployment -> Compiler -> Java Compiler,检查Per-module bytecode version里你的模块是不是设为10,Target bytecode version也要对应Java10,不然编译出来的字节码和运行环境不兼容也会出问题。
最后关于文档的吐槽我完全懂——JetBrains的文档对旧版本Java的细节确实不够友好,尤其是Java10这种非LTS版本,文档更新优先级不高。不过这类配置问题,核心都是确保项目、模块、运行配置、编译器这几个环节的JDK版本完全一致,把这些地方都核对一遍,99%的问题都能解决。
内容的提问来源于stack exchange,提问作者user4422315

