何时检查和使用 Jar 文件中的 Class-Path 属性

发布于 2024-11-05 10:21:46 字数 500 浏览 2 评论 0原文

我有一个学术问题,但在 Sun/Oracle 中找不到相应的文档。

我有一组 Jar 文件,并且 java vm 是这样启动的:

java -cp one.jar:two.jar:helper.jar my.company.project.Main

如您所见,我不使用 -jar 选项,而是提供一个类路径。 helper.jar 只有一个清单文件,定义了包含所需的其余 jar 文件的类路径。

由于我没有使用 -jar 命令行选项,我想知道是否评估并使用了该清单类路径。 (是的,我知道 -jar 的作用,我知道 Main-Class 的用途,并且我知道如何将类路径与 -jar 结合使用。我只不知道它是否不使用使用-jar

或者澄清我的问题:它工作可靠吗并且在官方Sun/Oracle文档中记录在案?

谢谢

I have an academic question for which I don't find the appropriated documentatino from Sun/Oracle.

I have a set of Jar files and the java vm is started like this:

java -cp one.jar:two.jar:helper.jar my.company.project.Main

As you can see I don't use the -jar option but give a classpath.
The helper.jar only has a manifest file defining a Class-Path containing the remaining jar files that are needed.

As I'm not using the -jar command line option I'm wondering if that manifest Class-Path is evaluated and used. (Yes, I know what -jar does, I know what Main-Class is for and I know how to use the Class-Path in conjunction with -jar. I only don't know if it works without using -jar)

Or to clarify my question: does it work reliable and is somewhere documented in an official Sun/Oracle document?

Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

马蹄踏│碎落叶 2024-11-12 10:21:46

当从 JAR 加载类时,JAR 文件清单中的类路径条目始终用于扩展类路径。无论您是否使用 -jar 开关,都没有什么区别。

事实上,我对这种行为感到惊讶,但它可以通过使用两个类 A 和 B 的简单示例轻松重现。让 A 引用 B。将每个类放入其自己的 JAR 文件中。将清单添加到 A.jar,其中包含 Class-Path: B.jar。那么以下命令将正确解析B:java -cp A.jar A

此处也对此进行了描述 Java 启动器如何查找 JAR-class-path类部分Java启动器如何查找JAR-class-path类

The class-path entry from a JAR file's manifest is always used to extend the classpath when loading classes from that JAR. It does not make a difference if you use the -jar switch or not.

I was in fact surprised about this behavior, but it is easily reproduced with a simple example using two classes A and B. Let A reference B. Put each class in its own JAR file. Add a manifest to A.jar that includes Class-Path: B.jar. Then the following command will correctly resolve B: java -cp A.jar A.

This is also described here How the Java Launcher Finds JAR-class-path Classes section How the Java Launcher Finds JAR-class-path Classes.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文