在java类路径中使用通配符

在java类路径中使用通配符,java,classpath,wildcard,Java,Classpath,Wildcard,我正在运行一个shell脚本,该脚本应该执行main方法: java -classpath /path/to/app/conf/lib/nameJar* com.example.ClassTest 在这一点上,我得到了一个例外: Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext Caused by: java.lang.ClassNo

我正在运行一个shell脚本,该脚本应该执行
main
方法:

java -classpath /path/to/app/conf/lib/nameJar* com.example.ClassTest
在这一点上,我得到了一个例外:

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)
这是因为spring jar位于另一个文件夹中。因此,我更改了脚本:

java -classpath /path/to/app/conf/lib/nameJar*:/path/to/app/lib/spring* com.example.ClassTest
但是使用此脚本,找不到com.example.ClassTest。对这个问题有什么想法吗


提前感谢

JVM似乎找不到与Spring相关的JAR。 将所有必需的jar放在一个位置(比如c:\libs),并在运行“java”命令时使用“java.ext.dirs”

比如:

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

java类路径通配符扩展是不寻常的

从:

理解类路径通配符

类路径项可以包含basename通配符*,该通配符被视为等效于 指定扩展名为的目录中所有文件的列表 .jar或.jar。例如,类路径条目foo/*指定所有 名为foo的目录中的JAR文件。一个类路径条目,包含 simply of*扩展为当前文件中所有jar文件的列表 目录

因此,您需要指定的是:

java -classpath /path/to/app/conf/lib/*:/path/to/app/lib/*
如果您只需要特定的jar,则需要单独添加它们。类路径字符串不接受通用通配符,如
nameJar*
*.jar
spring*


阅读了解更多信息。

对于属于类路径的普通jar,我不会使用
java.ext.dirs