2012-06-01 11 views
6

estoy ejecutando un script de shell que se supone que ejecutar un método main:Uso de comodines en la ruta de clases de Java

java -classpath /path/to/app/conf/lib/nameJar* com.example.ClassTest 

En este punto me sale esta excepción:

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext 
Caused by: java.lang.ClassNotFoundException: org.springframework.context.ApplicationContext 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:303) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316) 

Esto se debe a la primavera los frascos están ubicados en otra carpeta. Así que he cambiado el guión:

java -classpath /path/to/app/conf/lib/nameJar*:/path/to/app/lib/spring* com.example.ClassTest 

Pero con este guión, el com.example.ClassTest no se puede encontrar. Alguna idea sobre este tema?

Gracias de antemano

Respuesta

10

La expansión de comodines ruta de clases Java es inusual .

Desde el docs:

ruta de clase entendimiento comodines

entradas de vías de clase puede contener el carácter * nombre base de comodín, que se considera equivalente a especificando una lista de todos los archivos de la directorio con la extensión .jar o .JAR. Por ejemplo, la entrada de la ruta de clase foo/* especifica todos los archivos JAR en el directorio llamado foo. Una entrada classpath que consiste en simplemente de * se expande a una lista de todos los archivos jar en el directorio actual .

Por lo tanto, lo que hay que especificar es:

java -classpath /path/to/app/conf/lib/*:/path/to/app/lib/* 

Si necesita sólo frascos específicos, se tendrá que añadir de forma individual. La cadena de ruta de clase no acepta comodines genéricos como nameJar*, *.jar, etc. spring*

Leer Setting multiple jars in java classpath para más información.

0

parece JVM no puede encontrar los frascos relacionados con la primavera. Poner todos TARROS requeridas en un lugar (por ejemplo c: \ libs) y el uso de "java.ext.dirs" cuando runing comando "java"

como:

java -Djava.ext.dirs=c:/libs com.example.ClassTest 
+1

No utilizaría 'java.ext.dirs' para jar ordinarios que pertenecen a classpath. –

Cuestiones relacionadas