wake-up-neo.net

Hauptklasse mit Jar-Datei nicht gefunden oder geladen

Ich versuche, ein Glas mit zu laden

@echo off
Java -jar Test.jar
pause

Mit dem Manifest von 

Manifest-Version: 1.0
Main-Class: classes.TestClass

Im Jar-Verzeichnis kann ich beim Entpacken eindeutig eine classes\TestClass-Datei sehen.

Bearbeiten: classes.TestClass hat eine public static void main(String[] args)

Paketverzögerung in classes.TestClass ist package classes;

Ich bekomme aber immer noch die Fehlermeldung 

Could not find or load main class classes.TestClass

Ich habe alles durchgemacht, was ich mit diesem Problem finden konnte, und nichts davon scheint zu helfen.

Ich habe versucht, den Klassenpfad zu bearbeiten, das Manifest zu wiederholen und die neue JRE zu installieren. 

Was soll ich sonst tun? 

32
Austin

Ich habe es so funktionieren lassen:

TestClass.Java

package classes;

public class TestClass {

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

}

Verwenden Sie javac in der Befehlszeile, um TestClass.class zu erzeugen. Legen Sie TestClass.class in einen Ordner classes/.

MANIFEST.MF

Manifest-Version: 1.0
Main-Class: classes.TestClass

Dann renne

jar cfm test.jar MANIFEST.MF classes/

Dann führe es als aus

Java -jar test.jar
21
BeRecursive

Java -cp "full-path-of-your-jar" Main

eine andere Klasse mit "public static void main" in einem Paket ausführen,

Java -cp "full-path-of-your-jar" package1.package2.packages-hierarchy.ClassHavingMain

16
Kalidas Y

1.Erstellen Sie eine Textdatei mit dem Namen Manifest.txt und geben Sie den Wert als an 

Hauptklasse: classes.TestClass

2.Erstellen Sie das Glas als 

jar cfm test.jar Manifest.txt-Klassen/*. Klasse

3.Laufen Sie das Glas als 

Java -Jar test.jar

9
Arham

Ich hatte gerade das gleiche Problem am Ende, weil ich den Code von Word kopiert und eingefügt hatte und es wurde eine etwas andere Art von "-" - Zeichen verwendet. Das ist alles, was ich mir vorstellen kann, als ich es manuell eingetippt habe

4
Max Carroll

Ich hatte ein ähnliches Problem, das ich lösen konnte, indem ich für alle übergeordneten Ordner, in denen sich die JAR-Datei befindet (auf einem Linux-System) Ausführungsrechte gibt. 

Beispiel:

/folder1/folder2/folder3/executable.jar

alle 3 Ordner (ordner1, ordner2 und ordner3) sowie die ausführbare Datei.jar benötigen Ausführungsrechte für den aktuellen Benutzer, andernfalls wird der Fehler "Konnte Hauptklasse nicht finden oder laden" zurückgegeben.

2
Alex

Das Debuggen ist ohne vollständige Informationen sehr schwierig.

Die zwei am wahrscheinlichsten aussehenden Dinge an diesem Punkt sind, dass entweder die Datei im JAR nicht in einem Verzeichnis WITHIN THE JAR gespeichert ist oder dass es sich nicht um die richtige Datei handelt.

Sie müssen TestClass.class speichern - einige neue Benutzer speichern die Quelldatei TestClass.Java.

Und Sie müssen die JAR-Datei erstellen, damit TestClass.class mit einem Pfad von Klassen angezeigt wird. Stellen Sie sicher, dass es nicht "/ classes" ist. Verwenden Sie Zip, um die Datei anzuzeigen und sicherzustellen, dass sie einen Pfad für "Klassen" enthält.

2
arcy

Ich befolge die folgende Anweisung, um eine ausführbare .jar in Eclipse zu erstellen. Führen Sie dann den Befehl "Java -jar .jar" aus, um das Programm zu starten.

Es kümmert sich darum, Mainfest zu erstellen und Hauptkomponenten für Klassen und Bibliotheken einzubinden.

http://Java67.blogspot.com/2014/04/wie-nach-bilden-executable-jar-file-in-Java-Eclipse.html

1
user1457659

Zumindest habe ich das folgendermaßen gemacht:

Wenn Sie einen verschachtelten SRC-Baum (z. B. com.test.myclass.MyClass) haben und von einem Stammverzeichnis aus kompilieren, müssen Sie Folgendes tun:

1) Wenn Sie das Glas erstellen (normalerweise in ein Skript einfügen): jar -cvfm mein.jar de/test/myclass/manifest.txt de/test/myclass/MyClass.class

2) Das Manifest sollte folgendermaßen aussehen:

Hauptfest-Version: 1.0 Hauptklasse: com.test.myclass.MyClass Klassenpfad:. mein.jar

3) Jetzt können Sie das Glas von überall aus so ausführen:

Java -jar my.jar

Hoffe das hilft jemandem

1
Ramjet

Ich hatte ein seltsames Problem, als ein falscher Eintrag in MANIFEST.MF beim Laden fehlgeschlagen ist. In diesem Moment habe ich versucht, ein ganz einfaches Scala-Programm zu starten:

Falsch:

Main-Class: jarek.ResourceCache
Class-Path: D:/lang/scala/lib/scala-library.jar

Richtig:

Main-Class: jarek.ResourceCache
Class-Path: file:///D:/lang/scala/lib/scala-library.jar

Mit einer falschen Version erhielt ich eine kryptische Nachricht, genau wie das OP. Wahrscheinlich sollte es etwas wie missgebildete URL-Ausnahme beim Analysieren der Manifestdatei sagen.

Bei Verwendung eines absoluten Pfads in der Manifestdatei verwendet IntelliJ einen langen Klassenpfad für ein Programm.

1
Jarekczek

Ich weiß, das ist eine alte Frage, aber ich hatte dieses Problem vor kurzem und keine der Antworten hat mir geholfen. Corrals Kommentar zu Ryan Atkinsons Antwort hat mich jedoch auf das Problem aufmerksam gemacht.

Ich hatte alle meine kompilierten Klassendateien in target/classes, die in meinem Fall keine Pakete sind. Ich habe versucht, es mit jar cvfe App.jar target/classes App aus dem Stammverzeichnis meines Projekts zu packen, da sich meine App-Klasse im nicht benannten Standardpaket befand.

Dies funktioniert nicht, da das neu erstellte App.jar die Klasse App.class im Verzeichnis target/classes hat. Wenn Sie versuchen, diese JAR-Datei mit Java -jar App.jar auszuführen, wird beschwert, dass die App-Klasse nicht gefunden wird. Dies liegt daran, dass die Pakete in App.jar nicht mit den tatsächlichen Paketen im Projekt übereinstimmen.

Dieses Problem könnte gelöst werden, indem Sie das jar direkt aus dem Verzeichnis target/classes erstellen, indem Sie jar cvfe App.jar . App verwenden. Das ist meiner Meinung nach ziemlich umständlich.

Die einfache Lösung besteht darin, die Ordner, die Sie hinzufügen möchten, mit der Option -C aufzulisten, anstatt die standardmäßige Auflistung von Ordnern zu verwenden. In meinem Fall lautet der korrekte Befehl also Java cvfe App.jar App -C target/classes .. Dadurch werden alle Dateien im Verzeichnis target/classes dem Stammverzeichnis von App.jar direkt hinzugefügt, wodurch das Problem gelöst wird.

0
Log2

Ich habe die gleiche Fehlermeldung erhalten, nachdem ich die JAR-Datei per FTP übertragen hatte, und habe vergessen, den binären Modus einzustellen.

0
vincent

Ich hatte diesen Fehler, weil ich einen falschen Klassenpfad in meinen MANIFEST.MF geschrieben habe.

0
Sadap

Dieser Fehler tritt auch dann auf, wenn Sie versehentlich "-" vor dem Wortglas verpassen

Falscher BefehlJava jar test.jar

Richtiger BefehlJava -jar test.jar

0
mGeek