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" />


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM