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?
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
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
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
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
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.
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.
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
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
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.
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.
Ich habe die gleiche Fehlermeldung erhalten, nachdem ich die JAR-Datei per FTP übertragen hatte, und habe vergessen, den binären Modus einzustellen.
Ich hatte diesen Fehler, weil ich einen falschen Klassenpfad in meinen MANIFEST.MF
geschrieben habe.
Dieser Fehler tritt auch dann auf, wenn Sie versehentlich "-" vor dem Wortglas verpassen
Falscher BefehlJava jar test.jar
Richtiger BefehlJava -jar test.jar