如果在java类路径中有相对路径,那么这只是搜索当前工作目录。对清单文件中声明的类路径是否保持相同。在清单文件中,它是相对于jar所在的目录吗?
实施例。 CMDLINE
java -cp somejar.jar
或者
清单
Class-Path: somejar.jar
答案 0 :(得分:8)
如果您说-cp somejar.jar
,则要将somejar.jar
添加到类路径中。它只会尝试在您键入命令时从您当前所在的目录中找到somejar.jar
。
如果你在Manifest中说
Class-Path: somejar.jar
你是说将jar somejar.jar
添加到清单所在目录(也就是jar内)的类路径中。
作为旁注,当您使用-jar,-cp或-classpath指定类路径时,将覆盖系统变量CLASSPATH。
可在此处找到更多详情,http://docs.oracle.com/javase/tutorial/deployment/jar/downman.html
答案 1 :(得分:4)
你实际上提到了两种不同的情况:
案例#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”(如上所述),但相对于包含“somejar.jar”的目录解析“anotherjar.jar”。
(旁白:我的理解是,当通过-cp
或$CLASSPATH
包含JAR文件时,会遵守Manifest Class-Path:属性,但它只会影响从该JAR加载的类的依赖关系...请参阅下面的“查找类”链接。)
参考文献: