• 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" />
    
  • 相关阅读:
    Android Studio no debuggable applications解决方案2
    Android CountDownTimer倒计时器的使用
    git 创建分支并切换
    com.android.org.bouncycastle.jce.exception.ExtCertPathValidatorException: Could not validate certificate: current time:
    为什么调用 FragmentPagerAdapter.notifyDataSetChanged() 并不能更新其 Fragment
    Android 使WebView支持HTML5 Video(全屏)播放的方法
    使用retrofit注意
    解决 Android Studio 乱码问题
    Android视觉规范-间距规范与文字规范单位换算(dip、sp与px)
    教你如何删除WIN7系统文件以及无法删除的文件
  • 原文地址:https://www.cnblogs.com/zjutzz/p/13619165.html
Copyright © 2020-2023  润新知