如果在java类路径中有相对路径,那么这只是搜索当前工作目录.对清单文件中声明的类路径是否保持相同.在清单文件中它是相对于jar所在的目录?
防爆.CMDLINE
java -cp somejar.jar
Run Code Online (Sandbox Code Playgroud)
要么
表现
Class-Path: somejar.jar
Run Code Online (Sandbox Code Playgroud)
如果您说-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
您实际上提到了两种不同的情况:
情况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”链接。)
参考: