有没有办法在类路径中的目录中包含所有jar文件?
我正在尝试java -classpath lib/*.jar:. my.package.Program,它无法找到肯定在那些罐子里的类文件.我是否需要将每个jar文件分别添加到类路径中?
我在Windows上观察到Java7的通配符扩展行为的奇怪行为.
几个世纪以来,"*"与*之间存在着明显的差异.
似乎这对Java7来说不再适用(至少在Windows7上).
我在使用通配符类路径时注意到了这个问题.
尽管引用了wildcard-classpath,它仍然会被扩展.
因此,似乎不可能再将通配符传递给java应用程序.
因此使用java -cp "somewhere/*"将失败(如同"somewhere\*").
一种解决方法似乎是:java -cp "somewhere/*;"它抑制了扩张.
为了验证行为,我写了一个小的Echo.java类.
我发现使用java 1.6.0引用"*"和plain*就像预期的那样工作,而在Java7上我总是得到扩展的通配符.到目前为止,这在Windows7上被观察到,不知道XP上会发生什么.
问题出现了,因为Windows上的通配符永远不会被黑暗时代CMD.EXE扩展(就像UNIX上的任何shell一样).相反,每个可执行文件都必须使用setargv.obj显式执行此操作.
我发现了两个似乎描述类似问题的相关问题:
这是否被其他人观察到了?
或者是否有一些模糊的Windows或批处理文件设置来控制它?
迪特.
我正在运行一个应该执行main方法的shell脚本:
java -classpath /path/to/app/conf/lib/nameJar* com.example.ClassTest
Run Code Online (Sandbox Code Playgroud)
在这一点上,我得到了这个例外:
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)
Run Code Online (Sandbox Code Playgroud)
这是因为弹簧罐位于另一个文件夹中.所以我改变了脚本:
java -classpath /path/to/app/conf/lib/nameJar*:/path/to/app/lib/spring* com.example.ClassTest
Run Code Online (Sandbox Code Playgroud)
但是使用此脚本,无法找到com.example.ClassTest.关于这个问题的任何想法?
提前致谢