zoukankan      html  css  js  c++  java
  • 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:workjava okoutproduction ok):

    "D:softJetBrainsIntelliJ IDEA Community Edition 2019.3.5jbrinjava.exe" "-javaagent:D:softJetBrainsIntelliJ IDEA Community Edition 2019.3.5libidea_rt.jar=64142:D:softJetBrainsIntelliJ IDEA Community Edition 2019.3.5in" -Dfile.encoding=UTF-8 -classpath D:workjava	okoutproduction	ok sample.Main
    
    "D:softJetBrainsIntelliJ IDEA Community Edition 2019.3.5jbrinjava.exe" "-javaagent:D:softJetBrainsIntelliJ IDEA Community Edition 2019.3.5libidea_rt.jar=64158:D:softJetBrainsIntelliJ IDEA Community Edition 2019.3.5in" -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" />
    
  • 相关阅读:
    应用Druid监控SQL语句的执行情况
    J2EE应用监控后台执行SQL
    maven环境搭建
    【机器学习】Sklearn库主成分分析PCA降维的运用实战
    PCA降维算法
    80行Python实现-HOG梯度特征提取(转载)
    HOG特征提取算法原理(转载)
    数据预处理方法 总结
    【AI换脸】Faceswap源代码换脸软件安装指南(转)
    人工智能领域的会议和期刊(转载)
  • 原文地址:https://www.cnblogs.com/zjutzz/p/13619165.html
Copyright © 2011-2022 走看看