【问题标题】:Confusion on Uses of Jar Manifest File对 Jar Manifest 文件使用的困惑
【发布时间】:2013-12-02 16:32:26
【问题描述】:

我正在阅读使用 jar 工具打包 Java 应用程序。我注意到在 META-INF 目录下创建了一个清单文件。对于一个简单的应用程序,感觉就像,它没有任何目的。我在 stackoverflow 上搜索以了解 Manifest 文件的用法。我遇到了UsesOfManifestFile。在阅读答案时,我对第 2 点和第 3 点感到困惑:-

  1. 什么是下载扩展?我无法理解答案中的概念。
  2. 密封罐子是什么意思?它在下面给出了一个这样的例子

名称:myCompany/MyPackage/ 密封:true

放置这些信息有什么用?有人可以详细说明这些观点。 谢谢。

【问题讨论】:

    标签: java jar


    【解决方案1】:

    manifest 文件就像 java 程序运行 jar 的指导说明。创建清单时,它将保存关键信息,例如对主程序的引用。当 java 程序运行你的 jar 时,它不知道从哪里开始,所以它看起来在清单中,有一行告诉它带有 main 方法的类在哪里,所以它有一个程序的起点。另一个用途是类路径行,它将告诉程序在哪里可以找到 jar 中的任何 3rd 方库,否则 java 程序将找不到它们。

    清单文件中可以存储一系列数据,我建议查看它们上的Oracle information,看看是否更清楚。

    编辑:来自 Oracle 网站关于您的示例:

    JAR 文件中的包可以选择密封,这意味着该包中定义的所有类都必须归档在同一个 JAR 文件中。例如,您可能希望密封一个包,以确保软件中类之间的版本一致性。

    您可以通过在清单中添加 Sealed 标头来密封 JAR 文件中的包,其具有一般形式:

    名称:myCompany/myPackage/ 密封:真实 值 myCompany/myPackage/ 是要密封的包的名称。

    注意包名必须以“/”结尾。

    这似乎意味着您在程序中使用的所有类必须在同一个 jar 文件中。

    编辑 2(用于评论回复)

    清单可能包含以下行:

    Main-Class: com.mkyong.awt.AwtExample  
    

    当javaw.exe(我认为)运行你的可运行jar时,它不知道从哪里开始,所有java程序都通过main方法运行,但是如果你的jar中有50个类文件,它没有想法从哪一个有主要方法开始。它将查看清单文件,读取您的上述行并认为正确,main 方法在包 com.mkyong.awt 中,类是 AwtExample,然后它找到这个类并从该 main 方法运行程序。 jar 中最基本的功能是告诉运行 jar 的 java 程序在哪里可以找到运行 jar 所需的东西。

    注意:示例清单条目来自一个小 tutorial,它展示了如何创建一个简单的可运行 jar。

    祝你好运!

    【讨论】:

    • 所以这意味着指令基本上写在清单文件中,而不仅仅是文本数据。它们就像我们运行 jar 文件时读取的特殊命令。就像你在一个类中举了一个 main 方法的例子。
    • @benz 是的,当您创建清单时,您可能会使用记事本之类的东西来执行此操作,但是当 jre 运行您的 jar 时,它会在需要某些东西时查看这些行/命令,例如有关位置的信息主要方法是,或者在哪里可以找到第 3 方类。我用一个解释主类在哪里的小例子重新编辑了我的答案
    猜你喜欢
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多