在java类路径中使用通配符

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

 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) 

这是因为弹簧jar位于另一个文件夹中。 所以我改变了脚本:

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

但是使用此脚本,无法找到com.example.ClassTest。 关于这个问题的任何想法?

提前致谢

java classpath通配符扩展很不寻常。

来自文档 :

了解类路径通配符

类路径条目可以包含基本名称通配符*,它被认为等同于指定扩展名为.jar或.JAR的目录中所有文件的列表。 例如,类路径条目foo / *指定名为foo的目录中的所有JAR文件。 简单地由*组成的类路径条目扩展为当前目录中所有jar文件的列表。

那么,您需要指定的是:

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

如果您只需要特定的jar子,则需要单独添加它们。 类路径字符串接受通用通配符,如nameJar**.jarspring*等。

读取在java类路径中设置多个jar以获取更多信息。

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

喜欢 :

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