問題描述
系統是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" />
- 對於JavaFX工程,是
- 而我的工程,並不是叫做
untitled104
或JavaFxApplication
嘗試按照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" />