2009-07-27 15 views
14

Tengo un programa de Java que me gustaría poder ejecutar desde cualquier lugar de mi máquina. Me gustaría ejecutarlo desde mi símbolo del sistema de Cygwin. He creado scripts para llamar al programa java. Agregué la ubicación del programa java al classpath, y los scripts funcionan cuando los ejecuto desde el directorio del programa java. Sin embargo, cuando trato de ejecutar desde cualquier otro directorio, me sale:¿Cómo ejecuto un programa Java desde un directorio diferente?

java.lang.NoClassDefFoundError: commandprogram/CommandProgram 

Ésta es mi guión:

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

Cambio de la línea de java a lo siguiente:

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

produce los mismos resultados

+0

¿podría enviar su guión, que le dará a la gente una mejor idea de dónde mirar ... –

+0

no es lo que necesita hacer java commandprogram/CommandProgram.class o java-jar commandprogram/commandProgram .¿tarro? –

+0

no es el separador de ruta a dos puntos (:) en lugar del punto y coma (;) que ha usado? –

Respuesta

3

Después de probar casi todo lo que podía pensar, hice eco a cabo el comando y sierra que había una mezcla de rutas Cygwin y rutas de Windows. La solución era cambiar la secuencia de comandos para:

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

A continuación, la caquexia crónica ha cambiado a "C: \ Archivos de programa \ ..." en lugar de "/ cygdrive/c/programa \ Archivos/..."

Anteriormente había encontrado este problema y lo resolví con la solución cygpath -w, pero luego cambié mi secuencia de comandos ligeramente y no noté que el problema de ruta volvía.

20

añadir su directorio para classpath ejemplo:

java -classpath commandprogram CommandProgram 

o

java -classpath directory_to_program Program 
1

usted tiene que utilizar un punto para separar los paquetes, no una barra.

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

+0

/funciona también. Tenga en cuenta que el script funciona cuando estoy en el directorio con los scripts. – Swoogan

-4

La forma habitual de funcionamiento de un archivo Java es para guardarlo en la carpeta Java/Bin y ejecutar cmd

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

Si guarda el archivo en el directorio diferente, como D:, puede utilizar lo siguiente en el cmd indicador:

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

Guardar sus archivos java o de clase en el directorio 'bin' de Java es, de hecho, muy inusual y debe evitarse. El directorio 'bin' de Java es para los propios archivos binarios de Java y * nada * else. – Mac

Cuestiones relacionadas