我正在阅读使用jar工具打包java应用程序。我注意到在META-INF目录下创建了一个清单文件。对于一个简单的应用程序,感觉就像,它没有任何意义。我在stackoverflow上搜索了解Manifest文件的用法。我遇到了UsesOfManifestFile。在阅读答案时,我对第2点和第3点感到困惑: -
名称:myCompany / MyPackage / Sealed:true
提供这些信息有什么用?有人可以详细说明这些要点。 感谢。
答案 0 :(得分:2)
清单文件类似于java程序运行jar的指导说明。创建清单时,它将保存关键信息,例如对主程序的引用。当java程序运行你的jar时它不知道从哪里开始,所以它看起来是行的清单,告诉它使用main方法的类在哪里,因此它有一个程序的起点。另一个用途是类路径行,它将告诉程序在jar中找到任何第三方库的位置,否则java程序将无法找到它们。
有一系列数据可以存储在清单文件中,我建议您查看它们上的Oracle information,看看是否会将其清除一点。
编辑: 从Oracle网站上了解您的示例:
JAR文件中的包可以选择性地密封,这意味着该包中定义的所有类必须存档在同一个JAR文件中。例如,您可能希望密封包,以确保软件中类之间的版本一致性。
通过在清单中添加Sealed标头来密封JAR文件中的包,该标头具有以下一般形式:
名称:myCompany / myPackage / 密封:真的 值myCompany / myPackage /是要封装的包的名称。
请注意,包名称必须以“/".
结尾
这似乎意味着您在程序中使用的任何和所有类 必须 都在同一个jar文件中。
编辑2 (评论回复)
清单可能包含以下行:
Main-Class: com.mkyong.awt.AwtExample
当javaw.exe(我认为)运行你的runnable jar时,它不知道从哪里开始,所有java程序都是通过main方法运行的,但是如果你在jar中说过50个类文件,它就没有了想法哪一个有主要方法入手。它将查看清单文件,读取您的上一行并认为正确,main方法在包com.mkyong.awt中,类是AwtExample,然后它找到此类并从该main方法运行该程序。 jar中最基本的功能是告诉运行jar的java程序在哪里找到运行jar所需的东西。
注意:该示例清单条目来自一个小tutorial,它显示了如何创建一个简单的可运行jar。
祝你好运!