9

我正在运行一个应该执行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。关于这个问题的任何想法?

提前致谢

4

2 回答 2

15

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

文档

了解类路径通配符

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

因此,您需要指定的是:

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

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

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

于 2012-06-01T09:42:31.107 回答
0

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

喜欢 :

java -Djava.ext.dirs=c:/libs com.example.ClassTest
于 2012-06-01T09:40:53.037 回答