java -jar: 默认的类路径是什么?

3
在一个 jar 文件中,MANIFEST.mf 包含如下一行:

样式 A:

Class-Path: .

样式 B:

Class-Path: . eric-java-util_lib/tomcat-api.jar

样式 C:

// No `Class-Path` specified.

问题:

  1. 在B风格中,由Class-Path指定的jar是否与当前jar所在的目录相关?
  2. 那么在A和B风格中, . 代表什么?它是未压缩的jar根目录,还是当前jar所在的目录?我猜应该是后者,但不确定。
  3. 似乎除了MANIFEST.mf之外的类和包也都包含在所有3种风格的classpath中,这是因为 . 吗?或者,java -jar的默认classpath只是未解压缩的jar文件的根目录?
2个回答

2
由于您使用的是java -jar,因此以下内容适用:
在B风格中,Class-Path指定的jar文件是否与当前jar文件所在目录相关联?
在所有风格中,它都与“当前jar文件所在目录”有关。
然后,在A和B风格中,“.”代表什么?
它表示“.jar文件”所在的目录。
它是未压缩的jar文件根目录吗?
不是。
还是当前jar文件所在的目录?
是的。
我猜应该是后者,但不确定。
是的,请确保。
似乎除了MANIFEST.mf之外的类和包也包含在所有3种风格的类路径中,这是因为“.”吗?
我不知道“除MANIFEST.mf之外”的含义。
或者,java -jar的默认类路径只是未解压缩的jar文件的根目录吗?
除了Class-Path清单条目中指定的内容和.jar文件本身之外,java -jar没有默认的类路径。

我进行了更多的测试,所有你的结论都符合测试结果。关于默认的类路径,默认未压缩的 jar 包的根目录已经包含在类路径中,我猜这就是 jar 包的基本含义。 - Eric

0
在B风格中,由 Class-Path 指定的jar文件是否与当前jar文件所在目录相关?
是的,它是(请参阅下面的Java SE文档注释)。
那么在A风格和B风格中,“.” 是什么意思?它是未压缩的jar文件根目录,还是当前jar文件所在的目录?我猜应该是后者,但不确定。
它是jar文件所在的目录(请参阅下面的Java SE文档)。
似乎除了 MANIFEST.mf 之外的类和包也包含在所有3种风格的类路径中,这是因为“.”吗?还是 java -jar 的默认类路径仅是未压缩的jar文件的根目录?
正如 Java SE Documentation: How the Java Launcher Finds User Classes 中所述:
默认值为“.”,表示用户类文件是当前目录中的所有类文件(如果在包中,则在其下)。
...
由-jar选项指定的JAR归档文件,它会覆盖所有其他值。如果使用此选项,则所有用户类都必须来自指定的归档文件。

你的“附加信息”仅仅说明你“读了一篇文章”,甚至没有引用它。它没有任何价值或相关性,也不是我所评论的内容的一部分,而这显然是你回答中的一部分。 - user207421
当你修好它时,我可能会考虑。但你还没有。链接现在可用了,因为我为你修好了它。而且,出于我已经提到的原因,它仍然不相关。所有关于“额外信息”的东西都与此无关,过去如此,现在如此。 - user207421
我现在明白你的意思了。链接故意设置成那样是因为你必须搜索该部分,它不会直接跳转到那里。如果你阅读链接页面,你会看到以下声明:“由-jar选项指定的JAR归档文件,它将覆盖所有其他值。如果使用此选项,则所有用户类都必须来自指定的归档文件。”我的链接也是关于该主题的官方文档。 - acm
您的评论虽然有助于改进答案,但这正是讨论的目的。但从我所看到的,我们对问题的理解方式并不相同。这就是为什么我们写出了不同答案的原因。 - acm
关于默认值的引用是无关紧要的,因为紧随其后的引用就是自相矛盾的。不需要进行“解释”。你只需要删除它即可。并不困难。 - user207421
显示剩余10条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接