jar和classpath通配符

时间:2013-03-04 17:34:58

标签: java jar directory classpath wildcard

我希望在Win 7下为独立的Java应用程序指定多个类路径目录,其中java 7都是64位。

目录结构应如下

-app
|-lib
|-dynamicLib
|app.jar

lib文件夹包含在清单中直接引用的依赖项。 dynamicLib中的所有内容也应加载。

我尝试了以下内容:

dynamicLib\*添加到清单类路径

dynamicLib添加到命令行,就像这样

java -cp "dynamicLib\*";app.jar my.mainclass 

后者有和没有引号,绝对和相对路径,反转斜线等。但两者都不起作用。

那么,在执行jar时如何将通配符目录添加到现有的类路径?

4 个答案:

答案 0 :(得分:2)

使用正斜杠并将整个类路径放在引号中:

java -cp "app.jar;dynamicLib/*" my.mainclass

答案 1 :(得分:1)

Classpath看起来很好。

但是,要执行jar文件,您必须使用-jar选项。

java -cp "dynamicLib\*" -jar app.jar

请参阅documentation

- 更新:

  1. 使用上述命令仅加载来自dynamicLib jar JAR 文件。
  2. 通配符不是递归的:dynamicLib\nestedDir下的jar文件将不会被加载。

答案 2 :(得分:0)

来自Oracle的文档

  

... .jar,.zip或.class文件的类路径。每个类路径都应以文件名或目录结尾,具体取决于您将类路径设置为:

     

对于包含.class文件的.jar或.zip文件,类路径以.zip或.jar文件的名称结尾。

     

对于未命名包中的.class文件,类路径以包含.class文件的目录结束。

     

对于命名包中的.class文件,类路径以包含“root”包的目录(完整包名中的第一个包)结束。

Source

这意味着-cp dynamiclib\*将无效。如果动态lib包含jar,则必须在类路径中指定每个jar,如果它包含类文件,那么定义文件夹(不带*)就足够了,除非你在未命名的包中定义了类AKA默认包。

答案 3 :(得分:0)

从.jar文件启动应用程序时,命令行参数-cp将被忽略。相反,需要在 MANIFEST.MF文件" Class-Path"中指定类路径。属性即可。遗憾的是,此属性不支持通配符,因此所有.jar文件都需要明确命名。

因此,最初有一个" dynamicLib"目录只有在.jar文件的名称不会改变时才有效。

或者,您可以不使用中央app.jar而使用.class文件,从而允许您在命令行级别使用通配符。