【问题标题】:java -jar: What's the default class path?java -jar:默认的类路径是什么?
【发布时间】:2017-01-04 11:01:51
【问题描述】:

在 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种样式的类路径中,是因为.吗?或者,java -jar 的默认类路径只是解压 jar 文件的根目录?

【问题讨论】:

    标签: java jar classpath manifest


    【解决方案1】:

    在样式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 归档文件,它覆盖所有其他值。如果使用此选项,则所有用户类都必须来自指定的存档。

    【讨论】:

    • 您的链接指向“用户类路径”,当您使用java -jar 时会被忽略。
    • 这就是为什么它是附加信息,而不是答案的一部分。这是投反对票的原因吗?
    • 您的“附加信息”仅表明您“阅读了一篇文章”,甚至没有引用它。它没有任何价值或相关性,也不是我要评论的内容的一部分,这显然您的答案的一部分。
    • 我明白,你删除了它,现在不在答案中,它仍然被否决。
    • 我没有删除任何内容,我评论的错误仍然存​​在。你的观点让我无法理解。
    【解决方案2】:

    在您使用时 java -jar,以下适用:

    在样式B中,Class-Path指定的jar是否与当前jar的驻留目录有关?

    它与所有样式的“当前jar的驻留目录”有关。

    那么在样式 A 和 B 中, .什么意思?

    表示.jar文件所在的目录。

    是jar的未压缩根目录

    没有。

    还是当前 jar 的驻留目录?

    是的。

    我猜应该是后者,但不确定。

    是的。确定。

    似乎除了 MANIFEST.mf 之外的类和包也包含在所有 3 种样式的类路径中,是不是因为 .?

    我不知道“除了 MANIFEST.mf”是什么意思。

    或者,java -jar 默认的classpath就是解压jar文件的根目录?

    除了 .jar 文件本身和 Class-Path 清单条目中指定的任何内容之外,java -jar 没有默认类路径。

    【讨论】:

    • 我做了更多的测试,你的所有结论都符合测试结果。关于默认的类路径,未压缩jar的根目录包含在类路径中,我想这就是jar的基本含义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多