在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)

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

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

但是,使用此脚本无法找到com.example.ClassTest。关于这个问题有什么想法吗?

提前致谢

回答:

Java类路径通配符扩展不常见。

从文档:

类路径条目可以包含基本名称通配符,这被认为等效于指定目录中所有扩展名为.jar或.JAR的文件的列表。例如,类路径条目foo /

指定名为foo的目录中的所有JAR文件。仅由*组成的类路径条目将扩展为当前目录中所有jar文件的列表。

因此,您需要指定的是:

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

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

以上是 在Java类路径中使用通配符 的全部内容, 来源链接: utcz.com/qa/422391.html

回到顶部