IDEA新建工程编译报错 找不到或无法加载主类 com.company.Main

问题描述

系统是Win10,尝试安装了IDEA的多个版本:2019.3社区版,2020.2社区版,2020.2商业版。

发现都会出现同一个问题:新建的Java或JavaFX项目,编译报错

错误: 找不到或无法加载主类 com.company.Main
原因: java.lang.ClassNotFoundException: com.company.Main

排查

偶尔会出现项目能编译运行,对比发现编译报错的工程对应编译参数,少了-classpath xxx这样的参数(xxx是工程下的编译输出子目录,例如我的是-classpath D:\work\java\tok\out\production\tok):

"D:\soft\JetBrains\IntelliJ IDEA Community Edition 2019.3.5\jbr\bin\java.exe" "-javaagent:D:\soft\JetBrains\IntelliJ IDEA Community Edition 2019.3.5\lib\idea_rt.jar=64142:D:\soft\JetBrains\IntelliJ IDEA Community Edition 2019.3.5\bin" -Dfile.encoding=UTF-8 -classpath D:\work\java\tok\out\production\tok sample.Main

"D:\soft\JetBrains\IntelliJ IDEA Community Edition 2019.3.5\jbr\bin\java.exe" "-javaagent:D:\soft\JetBrains\IntelliJ IDEA Community Edition 2019.3.5\lib\idea_rt.jar=64158:D:\soft\JetBrains\IntelliJ IDEA Community Edition 2019.3.5\bin" -Dfile.encoding=UTF-8 sample.Main

由于IDEA右下方小窗出现过提示,说Windows Defender可能无法加载config和system文件,于是做过如下尝试:

  • 修改IDEA安装目录下bin/idea.properties中的config和system路径,从C:/Users/zz/.IdeaC2019.3换成D:/soft/JetBrains/.IdeaC;测试无效
  • 关闭Windows Defender,临时生效,但后续新建工程又出现编译问题
  • 关闭IDEA,删掉工程的.idea目录,重开IDEA,无效
  • 关掉当前工程的IDEA窗口,从其他的IDEA窗口,新建工程,并且目录选择为刚刚出问题的工程目录(也即是overwrite),可行

仔细观察,发现:

  • 每个工程根目录有个同名的.iml文件
  • 每个工程的.idea/modules.xml文件中,会提到一个.iml文件
  • 理论上,两个地方的.iml应该一致,而报编译错的工程里是不一样的:
    • 对于JavaFX工程,是JavaFxApplication.xml
      <module fileurl="file://$PROJECT_DIR$/JavaFxApplication.iml" filepath="$PROJECT_DIR$/JavaFxApplication.iml" />
    
    • 对于Java命令行工程,是untitledxxx.iml
    <module fileurl="file://$PROJECT_DIR$/untitled104.iml" filepath="$PROJECT_DIR$/untitled104.iml" />
    
  • 而我的工程,并不是叫做untitled104JavaFxApplication

尝试按照Android Studio中的修改gradle插件默认下载地址的方式,也就是改模板的方式,但并没有在IDEA的目录下找到相关插件的模板文件,这个方法宣告失败。给JetBrain Support发了邮件,不知道会不会有回复。

https://stackoverflow.com/questions/44717130/idea-plugin-gradle-wrong-iml-file-used

结论

IDEA 新建工程后,需要手动修改 .idea/modules.xml 中 .iml文件的名字为工程名字,例如:

<module fileurl="file://$PROJECT_DIR$/duoheshui.iml" filepath="$PROJECT_DIR$/duoheshui.iml" />
posted @ 2020-09-05 18:33  ChrisZZ  阅读(3429)  评论(0编辑  收藏  举报