2009-07-27 4 views
14

Ich habe ein Java-Programm, das ich gerne von überall auf meinem Rechner ausführen könnte. Ich möchte es über meine Cygwin-Eingabeaufforderung ausführen. Ich habe Skripte gemacht, um das Java-Programm aufzurufen. Ich habe dem Klassenpfad den Speicherort des Java-Programms hinzugefügt, und die Skripts funktionieren, wenn ich sie aus dem Verzeichnis des Java-Programms ausführe. Allerdings, wenn ich versuche, von einem anderen Verzeichnis zu laufen, erhalte ich:Wie führe ich ein Java-Programm aus einem anderen Verzeichnis?

java.lang.NoClassDefFoundError: commandprogram/CommandProgram 

Das ist mein Skript ist:

#!/bin/sh 
CWD=`dirname "$0"` 
java -cp "$CWD/classes;$CWD/lib/AJarFile.jar" commandprogram/CommandProgram 

Ändern der Java-Zeile wie folgt:

java -cp "$CWD/classes;$CWD/classes/commandprogram;$CWD/lib/AJarFile.jar" CommandProgram 

produziert die gleichen Ergebnisse.

+0

Sie Ihr Skript schreiben könnte, dass Sie nicht benötigen Java commandprogram/CommandProgram.class oder java -jar commandprogram/CommandProgram bei Menschen eine bessere Idee, auf denen zu sehen ... –

+0

Sie geben zu tun .Krug? –

+0

ist nicht der Pfad Trennzeichen ein Doppelpunkt (:) anstelle des Semikolons (;) Sie verwendet haben? –

Antwort

3

Nach fast alles versucht, was ich denken konnte, wiederholte ich den Befehl aus und Säge dass es Cygwin-Pfade und Windows-Pfade mischte. Die Lösung war das Skript zu ändern:

#!/bin/sh 
CWD=`dirname "$0"` 
CWD=`cygpath -w "$CWD"` 
java -cp "$CWD/classes;$CWD/lib/AJarFile.jar" commandprogram/CommandProgram 

Dann CWD auf "C: \ Programme \ ..." statt "/ cygdrive/c/Program \ Files/..."

Ich hatte zuvor dieses Problem und löste es mit der cygpath -w Lösung, aber änderte dann mein Skript leicht und bemerkte nicht, dass das Pfadproblem zurückkam.

20

fügen Sie Ihr Verzeichnis Beispiel Classpath:

java -classpath commandprogram CommandProgram 

oder

java -classpath directory_to_program Program 
1

Sie haben einen Punkt zu verwenden, um Pakete zu trennen, keinen Schrägstrich.

java -cp "$ CWD/Klassen; $ CWD/lib/AJarFile.jar" commandprogram.CommandProgram

+0

/funktioniert auch. Beachten Sie, dass das Skript funktioniert, wenn ich mich im Verzeichnis mit den Skripten befinde. – Swoogan

-4

Der üblicher Weg, eine Java-Datei des Laufens ist es im Java/Bin Ordner zu speichern und cmd

C:\Program Files\Java\jdk1.7.0_05\bin> javac filename.java && java classname 

Run Wenn Sie die Datei in anderem Verzeichnis wie D: speichern, erhalten Sie folgende auf der cmd verwenden können Prompt:

D:\Project java> set path=%path%;C:Program Files\Java\jdk1.7.0_05\bin 
+7

Das Speichern Ihrer Java-Dateien oder Klassendateien im Java-Verzeichnis bin ist in der Tat sehr ungewöhnlich und sollte vermieden werden. Das Java-Verzeichnis bin ist für Java-eigene Binärdateien und nichts anderes. – Mac