4

我想为 Win 7 下的独立 java 应用程序指定多个类路径目录,java 7 均为 64 位。

目录结构应该如下

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

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

我尝试了以下方法:

添加dynamicLib\*到清单类路径

像这样添加dynamicLib到命令行

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

后者带和不带引号、绝对和相对路径、反斜杠等。但两者都不起作用。

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

4

4 回答 4

2

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

java -cp "app.jar;dynamicLib/*" my.mainclass
于 2013-03-04T22:29:53.700 回答
1

类路径看起来不错。

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

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

请参阅文档

- 更新:

  1. 使用上述命令仅从 .jar 加载jarJAR文件dynamicLib
  2. 通配符不是递归的:dynamicLib\nestedDir不会加载下面的 jar 文件。
于 2013-03-04T17:44:32.660 回答
0

From Oracle's documentation

... Class paths to the .jar, .zip or .class files. Each classpath should end with a filename or directory depending on what you are setting the class path to:

For a .jar or .zip file that contains .class files, the class path ends with the name of the .zip or .jar file.

For .class files in an unnamed package, the class path ends with the directory that contains the .class files.

For .class files in a named package, the class path ends with the directory that contains the "root" package (the first package in the full package name).

Source

This then means that -cp dynamiclib\* won't work. If dynamic lib contains jars, you must specify each jar in the classpath, if it contains class files then defining the folder (without the *) should be enough, unless you have classes defined in the unnamed package AKA the default package.

于 2013-03-04T18:02:39.103 回答
0

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

因此,只有在 .jar 文件的名称不变的情况下,拥有“dynamicLib”目录的最初想法才有效。

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

于 2017-07-19T09:16:26.123 回答