2009-07-27 11 views
14

J'ai un programme java que j'aimerais pouvoir utiliser de n'importe où sur ma machine. Je voudrais l'exécuter depuis mon invite de commande Cygwin. J'ai fait des scripts pour appeler le programme Java. J'ai ajouté l'emplacement du programme java au classpath, et les scripts fonctionnent quand je les lance depuis le répertoire du programme java. Cependant, lorsque je tente de courir de tout autre répertoire, je reçois:Comment exécuter un programme Java à partir d'un répertoire différent?

java.lang.NoClassDefFoundError: commandprogram/CommandProgram 

Ceci est mon script:

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

Modification de la ligne de java à ce qui suit:

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

produit les mêmes résultats.

+0

pourriez-vous poster votre script, qui donnera aux gens une meilleure idée de l'endroit où regarder ... –

+0

ne pas que vous devez faire java commandprogram/CommandProgram.class ou java jar commandprogram/commandProgram .pot? –

+0

n'est pas le séparateur de chemin un signe deux-points (:) au lieu du point-virgule (;) que vous avez utilisé? –

Répondre

3

Après avoir essayé à peu près tout que je pouvais penser, je répétai la commande et scie qu'il y avait un mélange de chemins Cygwin et de chemins Windows. La solution était de changer le script:

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

Puis l'encéphalopathie des cervidés a changé à "C: \ Program Files \ ..." au lieu de "/ cygdrive/c/Program Files \/..."

J'avais précédemment rencontré ce problème et l'ai résolu avec la solution cygpath -w, mais j'ai ensuite légèrement modifié mon script et je n'ai pas remarqué que le problème de chemin revenait.

20

ajoutez votre répertoire à classpath exemple:

java -classpath commandprogram CommandProgram 

ou

java -classpath directory_to_program Program 
1

vous devez utiliser un point pour séparer les paquets, et non une barre oblique.

java "$ CWD/classes, CWD $/lib/AJarFile.jar" commandprogram.CommandProgram

+0

/fonctionne aussi. Gardez à l'esprit que le script fonctionne lorsque je suis dans le répertoire avec les scripts. – Swoogan

-4

La manière habituelle de l'exécution d'un fichier java est à enregistrer dans le dossier Java/Bin et exécuter cmd

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

Si vous enregistrez le fichier dans un répertoire différent, comme D:, vous pouvez utiliser ce qui suit sur la cmd invite:

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

L'enregistrement de vos fichiers java ou fichiers de classe dans le répertoire Java 'bin' est, en fait, très inhabituel et devrait être évité. Le répertoire Java 'bin' est pour les propres fichiers binaires de Java et * rien * d'autre. – Mac

Questions connexes