我希望在Win 7下为独立的Java应用程序指定多个类路径目录,其中java 7都是64位。
目录结构应如下
-app
|-lib
|-dynamicLib
|app.jar
lib文件夹包含在清单中直接引用的依赖项。 dynamicLib
中的所有内容也应加载。
我尝试了以下内容:
将dynamicLib\*
添加到清单类路径
将dynamicLib
添加到命令行,就像这样
java -cp "dynamicLib\*";app.jar my.mainclass
后者有和没有引号,绝对和相对路径,反转斜线等。但两者都不起作用。
那么,在执行jar时如何将通配符目录添加到现有的类路径?
答案 0 :(得分:2)
使用正斜杠并将整个类路径放在引号中:
java -cp "app.jar;dynamicLib/*" my.mainclass
答案 1 :(得分:1)
Classpath看起来很好。
但是,要执行jar
文件,您必须使用-jar
选项。
java -cp "dynamicLib\*" -jar app.jar
请参阅documentation。
- 更新:
dynamicLib
的 jar 或 JAR 文件。dynamicLib\nestedDir
下的jar文件将不会被加载。答案 2 :(得分:0)
来自Oracle的文档
... .jar,.zip或.class文件的类路径。每个类路径都应以文件名或目录结尾,具体取决于您将类路径设置为:
对于包含.class文件的.jar或.zip文件,类路径以.zip或.jar文件的名称结尾。
对于未命名包中的.class文件,类路径以包含.class文件的目录结束。
对于命名包中的.class文件,类路径以包含“root”包的目录(完整包名中的第一个包)结束。
这意味着-cp dynamiclib\*
将无效。如果动态lib包含jar,则必须在类路径中指定每个jar,如果它包含类文件,那么定义文件夹(不带*)就足够了,除非你在未命名的包中定义了类AKA默认包。
答案 3 :(得分:0)
从.jar文件启动应用程序时,命令行参数-cp将被忽略。相反,需要在 MANIFEST.MF文件" Class-Path"中指定类路径。属性即可。遗憾的是,此属性不支持通配符,因此所有.jar文件都需要明确命名。
因此,最初有一个" dynamicLib"目录只有在.jar文件的名称不会改变时才有效。
或者,您可以不使用中央app.jar而使用.class文件,从而允许您在命令行级别使用通配符。