Java类路径和相对路径

rub*_*buc 7 java classpath

如果在java类路径中有相对路径,那么这只是搜索当前工作目录.对清单文件中声明的类路径是否保持相同.在清单文件中它是相对于jar所在的目录?

防爆.CMDLINE

java -cp somejar.jar
Run Code Online (Sandbox Code Playgroud)

要么

表现

Class-Path: somejar.jar
Run Code Online (Sandbox Code Playgroud)

gre*_*dha 8

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

如果你在Manifest中说

Class-Path: somejar.jar
Run Code Online (Sandbox Code Playgroud)

你是说将jar添加somejar.jar到清单所在目录的类路径中(也就是在jar中).

另请注意,使用-jar,-cp或-classpath指定类路径时,将覆盖系统变量CLASSPATH.

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

  • 它总是从jar所在的目录中的manifest类路径中加载jar,即使你从另一个工作目录中从cmdline启动jar. (2认同)

Ste*_*n C 6

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

情况1

java -cp foo/bar/somejar.jar ...
Run Code Online (Sandbox Code Playgroud)

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

案例#2

java -jar foo/bar/somejar.jar ...
Run Code Online (Sandbox Code Playgroud)

其中 somejar.jar 包含

Class-Path: anotherjar.jar
Run Code Online (Sandbox Code Playgroud)

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

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

参考: