9

如果您在 java 类路径中有相对路径,是否只搜索当前工作目录。同样适用于清单文件中声明的类路径。在清单文件中,它是否相对于 jar 所在的目录?

前任。命令行

java -cp somejar.jar

或者

显现

Class-Path: somejar.jar
4

2 回答 2

9

如果您说-cp somejar.jar要添加somejar.jar到类路径中。它只会somejar.jar在您键入命令时尝试从您当前所在的目录中查找。

如果你在 Manifest 中说

Class-Path: somejar.jar

您是说将 jarsomejar.jar从清单所在的目录(也就是 jar 内部)添加到类路径中。

附带说明一下,当您使用 -jar、-cp 或 -classpath 指定类路径时,您将覆盖系统变量 CLASSPATH。

更多细节可以在这里找到,http://docs.oracle.com/javase/tutorial/deployment/jar/downman.html

于 2013-05-11T23:33:59.717 回答
5

您实际上提到了两种不同的情况:

情况1

java -cp foo/bar/somejar.jar ...

在这种情况下,JAR(或其他)的相对路径是相对于当前目录解析的。

案例#2

java -jar foo/bar/somejar.jar ...

somejar.jar 包含

Class-Path: anotherjar.jar

在这种情况下,“foo/bar/somejar.jar”是相对于当前目录解析的(如上),但“anotherjar.jar”是相对于包含“somejar.jar”的目录解析的。

-cp(除此之外:我的理解是,当通过or包含 JAR 文件时,会尊重 Manifest Class-Path: 属性$CLASSPATH,但它只会影响从该 JAR 加载的类的依赖关系......请参阅下面的“findingclasses”链接。)

参考:

于 2013-05-12T00:11:24.383 回答