2009-07-27 13 views
14

Ho un programma java che mi piacerebbe poter eseguire da qualsiasi luogo sulla mia macchina. Mi piacerebbe eseguirlo dal mio prompt dei comandi Cygwin. Ho creato script per chiamare il programma java. Ho aggiunto la posizione del programma java al classpath e gli script funzionano quando li eseguo dalla directory del programma java. Tuttavia, quando si tenta di eseguire da qualsiasi altra directory, ottengo:Come si esegue un programma java da una directory diversa?

java.lang.NoClassDefFoundError: commandprogram/CommandProgram 

Questo è il mio script:

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

La modifica della linea di Java al seguente:

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

produce gli stessi risultati.

+0

puoiaffiggere lo script, che darà alle persone una migliore idea su dove guardare ... –

+0

non avete bisogno di fare java commandprogram/CommandProgram.class o java-jar commandprogram/commandProgram .vaso? –

+0

non è il separatore di percorso a due punti (:) invece del punto e virgola (;) che hai usato? –

risposta

3

Dopo aver provato quasi tutto ciò che mi veniva in mente, feci eco il comando e la sega che c'era un mix di percorsi Cygwin e percorsi Windows. La soluzione era quella di modificare lo script per:

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

Poi CWD modificato in "C: \ Program Files \ ..." invece di "/ cygdrive/C/Programmi \ File/..."

Avevo già riscontrato questo problema e l'ho risolto con la soluzione cygpath -w, ma poi ho cambiato leggermente lo script e non ho notato che il problema del percorso è tornato.

20

aggiungere la directory al classpath esempio:

java -classpath commandprogram CommandProgram 

o

java -classpath directory_to_program Program 
1

è necessario utilizzare un punto per separare i pacchetti, non è una barra.

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

+0

/funziona anche. Tieni presente che lo script funziona quando sono nella directory con gli script. – Swoogan

-4

Il solito modo di esecuzione di un file Java è per salvarlo nella cartella Java/Bin ed eseguire cmd

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

Se si salva il file in directory differenti, come D:, è possibile utilizzare il seguente sul cmd pronta:

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

Salvare i file java o i file di classe nella directory 'bin' di Java è, in effetti, molto insolito e dovrebbe essere evitato. La directory Java 'bin' è per i file binari di Java e * nothing * else. – Mac

Problemi correlati