2010-06-16 12 views
7

Tengo un único archivo .java (driver.java) que estoy tratando de compilar y ejecutar desde la línea de comandos. Utiliza la biblioteca externa llamada EXT.jar, cuya estructura es simplemente una carpeta llamada EXT con algunas docenas de clases dentro de ella.Problemas de la línea de comandos de Java con las bibliotecas .jar

Así que corro:

javac -cp EXT.jar driver.java 

Esto compila la clase bien.

entonces cuando corro:

java -cp EXT.jar driver 

me siento un java.lang.NoClassDefFoundError.

Por extraño que parezca, si desempaquetar el JAR (así que ahora tengo una carpeta en el directorio raíz llamada EXT), el último comando funciona bien! Driver se ejecutará!

¿Hay alguna manera en que pueda hacer que el controlador.class busque los archivos de la clase de necesidad desde EXT.jar/EXT/*class en lugar de una carpeta EXT real?

Gracias!

Respuesta

18

Está compilando la clase en el directorio local. Entonces, cuando lo ejecuta, debe incluir el directorio actual en su classpath. Por ejemplo:

java -cp .;EXT.jar driver 

O en Linux:

java -cp .:EXT.jar driver 

Con la forma en que lo tienes ahora, que estás diciendo la ruta de clase es única ext.jar (junto con lo que está en el entorno CLASSPATH variable) y nada más (por lo que se excluye el directorio actual, donde está ubicado el archivo driver.class)

+0

¡Perfecto! ¡Gracias! – Monster

+0

Hará. Al parecer, tengo que esperar 15 minutos para aceptar una respuesta :) – Monster

+0

Gracias Matt, tu respuesta funcionó para mí en el caso de un solo contenedor, pero ahora necesito 2 usar otro contenedor. Ambos archivos están en una carpeta llamada "libs" en mi proyecto. Pero no pude hacerlo funcionar. Estoy usando Ubuntu. Por favor ayuda – AndroidGuy

Cuestiones relacionadas