2017-07-06 91 views
-1

所以我有以下項目結構: 我有一個名爲「com.github.liketechnik」包。我的主類是Build in這個包(「com.github.liketechnik.Build」)。JAR文件 - 主類未找到

我編程把編譯的類從那裏進入一個jar文件有正確的表現,如G。包含一個版本屬性和一個Main-Class條目「com.github.liketechnik.Build」。 jar內的類包含在「com/github/liketechnik/Build.class」下。

運行java -jar output.jar時,它直接失敗:「Error:Mainclass com.github.liketechnik.Build could not be found or loaded」(德語翻譯)。當直接通過java -cp build/main com.github.liketechnik.Build(例如直接在jar外部的類文件)運行這個類時,它無需工作。

我想這個小時,也搜索了錯別字每一個文件,所以我感謝所有幫助這個問題,因爲有關此類問題的其他線程沒有與我的幫助。如果您直接需要更多信息或源代碼,我將這個提供給您沒有任何問題。

編輯:jar文件的新增結構。

JAR文件具有以下結構:

  • 一個目錄 「META-INF」 含有 「MANIFEST.MF」 與提及的條目。

  • 一個目錄結構 「COM/github上/ liketechnik/Build.class」(例如,包含其它類(在子包)太

清單:

Manifest-Version: 1.0 
Main-Class: com.github.liketechnik.Build 

生成。的java:

package com.github.liketechnik; 

public class Build { 

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

輸出時手動運行:Hi(如預期) 從罐子運行時的輸出:Fehler: Hauptklasse com.github.liketechnik.Build konnte nicht gefunden oder geladen werden(爲什麼?)

+0

JAR文件的結構是什麼樣的?您可以用任何ZIP工具打開它。 –

+0

編輯我的答案顯示結構。我也檢查了這個文件,這似乎也正確的我。 – liketechnik

+0

而不是描述文件的內容(如清單),只是**通過直接複製和粘貼顯示**。你不一定要粘貼整個東西,但顯示相關的部分比單獨的英文描述更有幫助。 –

回答

0

好吧,似乎以編程方式創建.jar檔案並不像看起來那麼容易。看起來像需要處理的.zip規範(see this question)是另一個警告,所以需要在目錄層次結構後添加條目。

例: 假設你有目錄abb包含文件test.classtoll.class,你必須先添加a,然後b然後將文件內b。否則它將無法工作。