2010-01-25 20 views
5

Soy nuevo en Java y no estoy seguro de cómo acceder a un archivo de clase ubicado en un directorio específico desde un jar de programa separado.Configuración de Java Classpath para cargar un archivo de clase

Por ejemplo, tengo un tercer archivo jar partido ubicado en /, que se supone que cargar MyClass ubicadas en /mylib/MyClass.class, así que intentaron correr:

java -jar mainprog.jar -classpath "/mylib" MyClass 

Pero me estoy el error:

Exception in thread "main" java.lang.NoClassDefFoundError: MyClass 
Caused by: java.lang.ClassNotFoundException: MyClass 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:221) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:209) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:324) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:269) 
     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:337) 

¿Qué estoy haciendo mal?

Respuesta

11

Cuando se utiliza "-jar" continuación solamente el atributo Class-Path definido en el archivo dentro del archivo META-INF/MANIFEST.MFjar influirá en la ruta de clase.

Ignorará también el argumento MyClass (o más específicamente: lo interpretará como un argumento para la clase principal definida en el MANIFEST.MF).

Si simplemente quiere llamar a una clase de ese frasco de llamarlo así:

java -cp mainprog.jar:/mylib MyClass 
// or using this one on windows: 
java -cp mainprog.jar;/mylib MyClass 
2

En la línea de comandos que está intentando ejecutar MyClass como un programa, que basa en su descripción no es lo que querer.

Necesita averiguar cuál es la clase principal que se utiliza para ejecutar el programa en el contenedor. Puede descomprimir el archivo jar con jar -xf mainprog.jar y mirar el archivo META-INF/MANIFEST.MF. Debe tener una entrada que indique que la clase principal del contenedor es (no recuerdo el nombre de la entrada en este momento).

Después de cambiar su línea de comandos para algo como esto:

java -classpath /mainprog.jar:/mylib package.name.to.jar.MainClass 
Cuestiones relacionadas