2016-04-04 2 views
1

Ich habe versucht, eine App aus einem jarfile zu laufen, aber es hält den Ausdruck:Jar-Datei konnte nicht Hauptklasse laden oder finden

„kann nicht Hauptklasse finden oder laden ...“.

Ich habe versucht, dieses Problem zu lösen mit Informationen aus dieser thread aber alles schien nutzlos. Um ehrlich zu sein, bin ich verzweifelt, weil das ein so triviales Problem ist.

Auch immer, was ich tat:

Main-Class: com.test.Test 

mein Manifest Attribut:

jar cfm test.jar manifest.txt <full_path>/out/com/test/*.class 

das ist, was in der JAR-Datei verpackt ist (die Test.class Datei)

Die Testklasse:

package com.test; 

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

Und wie versuchen Sie, es aufzurufen? – KevinO

+3

Es sieht nicht so aus, als hätten Sie Ihr JAR korrekt gepackt (Sie behalten die Ordnerstruktur nicht bei). Ich denke du willst 'jar cfm test.jar manifest.txt /out /' –

+0

machst du es dann mit 'java -jar' oder' java -cp'? – fukanchik

Antwort

1

Sie sollten die Klasse korrekt verpacken. Do

jar cfm test.jar manifest.txt com/test/*.class 

im übergeordneten Ordner des Ordners com. Wenn Sie den absoluten Pfad angeben (wie Sie es getan haben), wird die Klassendatei falsch gepackt.

+0

Oder verwenden Sie "-C" wie in http://stackoverflow.com/a/18972208/2868801. Auch wenn Sie nur 'Hauptklasse' in Ihrem Manifest benötigen, können Sie' -e' und den Klassennamen anstelle von '-m' und der Manifestdatei verwenden. –

+0

@ dave_thompson_085 das ist ein guter Vorschlag, aber das Problem von OP ist, dass die Klasse nicht richtig verpackt ist. Einfach den Pfad der Klasse (zu einem relativen) zu ändern sollte ausreichen, alles andere bleibt gleich. –

+0

Änderung der vollständigen relativen Pfad funktionierte nicht Kedar und @ ThierryB – Wecherowski

1

Erstens, falls Sie Eclipse-IDE verwenden, gibt es einige Tools wie die Fat Jar Plugin die in der Lage sind, um Ihren Build zu verpacken.

Zweitens, gibt es Maven, um Ihre Abhängigkeiten zu behandeln, und bauen Sie das Paket, das Sie brauchen, mit allem in Ordnung. In Ihrem Fall werde ich nach dem Apache Maven Jar Plugin suchen.

Endlich, die alte Schule Weg mit der Kommandozeile zu gehen, wie Sie es versucht haben. Wie Eliott Frisch in Ihren Fragekommentaren gesagt hat, müssen Sie nicht den vollständigen Pfad zur Hauptklasse innerhalb Ihrer jar cfm test.jar manifest.txt <full_path>/out/ angeben. Und was ist, weil die manifest.txt bereits das Paket Informationen geben!