2016-09-29 230 views
0

我在IDEA Build> Build Artifacts中創建jar文件。但無法運行java -jar jarname.jar - Error: Could not find or load main class Hello。 MANIFEST.MF文件位於/ resources/META-INF /文件夾中。這裏是發射器類:無法運行jar文件:無法找到或加載主類Hello

public class Hello { 

    public static void main(String[] args) { 
     System.out.println("Hello World!"); 
    } 

} 

MANIFEST.MF:

Manifest-Version: 1.0 
Main-Class: Hello 

enter image description here


編輯:添加文物設置截圖

enter image description here

+0

是什麼在你的清單文件? – RaGe

+0

檢查你的jar文件,看看是否包含類文件。當您使用IntelliJ配置工件構建時,必須指定要包含類,src或兩者。 – Brion

+0

仔細閱讀我的問題。它顯示了MANIFEST文件 –

回答

1

enter image description here

你去項目結構,然後選擇從左邊的選項卡「神器」。添加一個新的工件,正如你在這裏看到的,儘管我選擇了一個清單並選擇了一個Main類,在左邊顯示了它將添加到jar中的內容。在右側顯示有哪些可用(未添加)。然而,由於我還沒有添加任何東西到我的jar中,它只會添加Manifest而不是實際的代碼。

您需要指定要將編譯輸出添加到jar,否則它只會具有清單而不是實際的類。你可以通過雙擊它來做到這一點。如果你指定編譯輸出上面的目錄,它也會添加src,我相信。

更新:添加外部依賴

enter image description here

enter image description here

+0

它的工作原理。但是,當我添加apache io庫fot測試並啓動.jar時,發生錯誤: 'java.lang.NoClassDefFoundError:org/apache/commons/io/FileUtils at Hello.main(Hello。java:10)' 我明白包含庫的問題,但不知道如何包含它們 –

+0

org.apache.commons.io.FileUtils不是標準庫,因此程序正在從中繪製依賴關係。當帶有綠色+圖標的新工件時,指定您要使用依賴而不是空來創建。我會用幾個屏幕截圖更新答案,以幫助解決。 – Brion

0

我相信你的清單文件必須說明什麼是主類,如果你想它自動執行。

Main-Class: Hello

否則,您需要在嘗試執行該jar時在命令行上指定它。至於如何用IntelliJ來做到這一點,我無法幫到你。

java -cp hello.jar Hello

注意,參考類的主要方法是完全合格的位置(package.classname),但因爲你的類有默認的包,它不是必需的。

+0

用'java -cp hello.jar你好'我得到了'錯誤:找不到或者加載主類你好' –

+0

那麼你需要驗證你的jar是否被正確創建,意思是你的jar文件中的Hello.class – loesak

相關問題