有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Jar清单文件使用的java困惑

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

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

Name: myCompany/MyPackage/ Sealed: true

放这样的信息有什么用?有人能详细阐述一下这些观点吗。 谢谢


共 (1) 个答案

  1. # 1 楼答案

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

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

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

    Packages within JAR files can be optionally sealed, which means that all classes defined in that package must be archived in the same JAR file. You might want to seal a package, for example, to ensure version consistency among the classes in your software.

    You seal a package in a JAR file by adding the Sealed header in the manifest, which has the general form:

    Name: myCompany/myPackage/ Sealed: true The value myCompany/myPackage/ is the name of the package to seal.

    Note that the package name must end with a "/".

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

    编辑2(评论回复)

    清单可能包含以下行:

    Main-Class: com.mkyong.awt.AwtExample  
    

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

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

    祝你好运