Ich habe Probleme damit, eine Java-Anwendung in der Konsole und / oder mit Ant laufen zu lassen. Ich weiß, dass viele Startprobleme damit zusammenhängen, dass der Klassenpfad nicht gesetzt oder falsch gesetzt wurde, obwohl ich mir ziemlich sicher bin, dass ich ihn korrekt eingestellt habe, sodass meine Suche nur Ergebnisse lieferte.
Hier ist das allgemeine Setup meiner Anwendung: Klassen sind in Paketen Modell, Ansicht und Controller. controller.Controller ist die Klasse mit der Hauptmethode. Ich verwende Objektdb als meinen JPA-Provider.
Ich verwende Ant, um meine Anwendung zu kompilieren.
Nach dem Kompilieren kann ich meine Anwendung von ant mit dem folgenden Skript ausführen:
%Vor%Dabei ist $ {main-class} controller.Controller und classpath bestehen aus den Ordnern / lib und / dist (die JAR-Datei der Anwendung wird nach / dist kompiliert)
Nun habe ich versucht, alle .jar-Dateien aus / lib und / dist in einen separaten Ordner zu kopieren und sie mit java -jar cooking.jar -cp .
auszuführen, was zu
Also habe ich versucht, ant und leicht modifiziert oben Build-Ziel zu:
%Vor%was zum selben Fehler führt. Ich verstehe nicht warum.
Nur um es zu testen, habe ich versucht, von der Kommandozeile zu laufen, indem ich die Hauptklasse direkt anwähle: java -cp . controller.Controller
, die aus irgendeinem Grund die Klasse nicht einmal finden kann (sie ist dort, ich habe es bestätigt):
Ich habe JAVA_HOME auf den JDK-Pfad und CLASSPATH auf den JRE-Pfad / lib gesetzt. Betriebssystem ist Windows 7 64 Bit, Java Version ist 1.6.0_25-b06
Ich bin von zwei Dingen verwirrt: a) Warum kann Java controller.Controller nicht finden, obwohl es in der .jar-Datei vorhanden ist und sich die .jar-Datei im aktuellen Verzeichnis befindet? b) Was mache ich falsch, dass das Aufrufen von Java mit -jar die Suchmechanismen zu durcheinander bringt.
Jede Hilfe wird sehr geschätzt.
Der Klassenpfad sollte aus
bestehenSie können den Klassenpfad nicht auf ein Verzeichnis von Gläsern verweisen. Anders verhält es sich beim Ausführen eines Anwendungsservers (zB Tomcat), der jars aus einem Verzeichnis für Sie lädt.
obwohl ich ziemlich sicher bin, dass ich es richtig eingestellt habe
Der Beweis ist gegen dich. Die JVM teilt Ihnen mit, dass Sie sie nicht korrekt eingestellt haben.
Was denkst du, worauf ref 'Klassenpfad' zeigt? Woher nehmen Sie an, dass seine Werte herkommen? Sie sollten innerhalb der Ant build.xml definiert werden, richtig? So:
%Vor%Wenn Sie eine ausführbare JAR erstellen, müssen Sie die Hauptklasse und den Klassenpfad im Manifest angeben, wie CoolBeans im Kommentar korrekt darauf hingewiesen hat. Die JAR-Standorte von Drittanbietern müssen relativ zur ausführbaren JAR sein. Sie sollten sie mit Ihrer ausführbaren JAR-Datei so verpacken, dass der relative Pfad leicht zu sortieren und zu verstehen ist.
Tags und Links java classpath noclassdeffounderror