在 Java 中使用 MANIFEST.MF 文件

2023-11-21

我注意到 JAR、WAR 和 EAR 文件有一个MANIFEST.MF文件下的META-INF folder.

有什么用MANIFEST.MF文件?该文件中可以指定哪些内容?


使用 Java 开发工具包 1.0 版创建的 JAR 文件中的 Manifest 文件的内容如下。

Manifest-Version: 1.0

所有条目都是名称-值对。标头的名称与其值之间用冒号分隔。默认清单显示它符合清单规范 1.0 版。 清单还可以包含有关打包在存档中的其他文件的信息。清单中记录的具体文件信息取决于 JAR 文件的预期用途。默认清单文件不假设它应该记录有关其他文件的哪些信息,因此它的单行仅包含有关其自身的数据。 特殊用途清单标头

根据 JAR 文件的预期作用,可能需要修改默认清单。如果 JAR 文件只是出于归档目的而创建,则 MANIFEST.MF 文件没有任何用途。 JAR 文件的大多数用途超出了简单的归档和压缩范围,并且需要在清单文件中包含特殊信息。下面总结了一些特殊用途 JAR 文件函数所需的标头的简要描述

捆绑为 JAR 文件的应用程序:如果应用程序捆绑在 JAR 文件中,则需要告知 Java 虚拟机该应用程序的入口点是什么。入口点是任何具有 public static void main(String[] args) 方法的类。此信息在 Main-Class 标头中提供,其一般形式为:

Main-Class: classname

值 classname 将替换为应用程序的入口点。

下载扩展:下载扩展名是由其他 JAR 文件的清单文件引用的 JAR 文件。在典型情况下,小程序将捆绑在一个 JAR 文件中,该文件的清单引用一个 JAR 文件(或多个 JAR 文件),该文件将用作该小程序的扩展。扩展可以以相同的方式相互引用。 下载扩展在小程序、应用程序或其他扩展的清单文件的 Class-Path 标头字段中指定。类路径标头可能如下所示,例如:

Class-Path: servlet.jar infobus.jar acme/beans.jar

有了这个头文件,servlet.jar、infobus.jar 和 acme/beans.jar 文件中的类将用作 applet 或应用程序的扩展。 Class-Path 标头中的 URL 是相对于 applet 或应用程序的 JAR 文件的 URL 给出的。

包装密封:JAR 文件中的包可以选择密封,这意味着该包中定义的所有类必须存档在同一个 JAR 文件中。可以密封包以确保软件中的类之间的版本一致性或作为安全措施。 要密封包,需要为包添加 Name 标头,然后添加 Sealed 标头,类似于:

Name: myCompany/myPackage/
Sealed: true

Name 标头的值是包的相对路径名。请注意,它以“/”结尾,以区别于文件名。 Name 标头后面的任何标头(中间没有任何空行)都适用于 Name 标头中指定的文件或包。在上面的示例中,由于 Sealed 标头出现在 Name: myCompany/myPackage 标头之后,并且之间没有空行,因此 Sealed 标头将被解释为(仅)应用于包 myCompany/myPackage。

包版本控制:包版本控制规范定义了几个清单标头来保存版本控制信息。可以将一组此类标头分配给每个包。版本控制标头应直接出现在包的名称标头下方。此示例显示所有版本控制标头:

Name: java/util/
Specification-Title: "Java Utility Classes" 
Specification-Version: "1.2"
Specification-Vendor: "Sun Microsystems, Inc.".
Implementation-Title: "java.util" 
Implementation-Version: "build57"
Implementation-Vendor: "Sun Microsystems, Inc."

附加信息:https://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Java 中使用 MANIFEST.MF 文件 的相关文章

  • 如何使用固定数量的工作线程实现简单线程

    我正在寻找最简单 最直接的方法来实现以下内容 主程序实例化worker 执行任务的线程 Only n任务可以同时运行 When n已达到 不再有工人 开始直到计数 正在运行的线程回落到下方n 我觉得Executors newFixedThr
  • 如何将变量的全部内容发送/导出到文本文件/xml 文件/剪贴板?

    我想将实例的内容 最好以树形形式 发送给某人 打印屏幕是不行的 因为类太复杂了 您需要将输出转回实例吗 在这种情况下 其他答案都是正确的 如果您只想手动检查实例的内容 理想情况下您的类都将实现toString 你可以将其重定向到一个文件 如
  • 如果列名不同,则一对多休眠连接

    我有三个具有以下结构的表 合同 gt Contract id 主要 customer company id Vendor company id 公司 gt Company id 主要 创建日期 创建者 Company Timeline gt
  • 如何在 Java 中访问嵌套的 HashMap?

    我有一个 Java 中的 HashMap 其中的内容 你们可能都知道 可以通过以下方式访问 HashMap get keyname 如果一个 HashMap 位于另一个 HashMap 中 即嵌套的 HashMap 我将如何访问内容 我可以
  • 如何在log4j的配置文件中为文件附加器提供环境变量路径

    我有一个log4j xml配置文件 和一个RollingFileAppender我需要提供用于存储日志的文件路径 问题是我的代码将作为可运行的 jar 部署在 Unix 机器上 所以如果我传递这样的参数 value logs message
  • Java 读取大文本文件时出现 OutOfMemoryError

    我是 Java 新手 正在读取非常大的文件 需要一些帮助来理解问题并解决它 我们有一些遗留代码 必须对其进行优化才能正常运行 文件大小仅在 10mb 到 10gb 之间变化 只有当文件开始大小超过 800mb 时才会出现启动问题 Input
  • JavaFX 2.0 FXML 子窗口

    经过多次搜索我发现了这个问题如何创建 javafx 2 0 应用程序 MDI https stackoverflow com questions 10915388 how to create a javafx 2 0 application
  • 尝试获取屏幕上绘制的每个随机圆圈的 x、y 坐标

    您好 我正在制作一款游戏 该游戏将在屏幕上创建随机圆圈 随机创建的圆圈的值为红色或绿色 我的问题是 我希望不仅能够确定用户何时单击其中一个圆圈 而且还能够确定他们最终单击的圆圈 红色或绿色 下面是我的代码 我的主要问题是试图找到将要绘制的圆
  • java中的单链表和双向链表?

    在java中 哪个集合接口可以有效地实现单链表和双向链表 请问代码示例吗 毫不奇怪 实现双向链表的正确接口是 LinkedList 看Java文档 http docs oracle com javase 8 docs api java ut
  • Java 中的 ExecuteUpdate sql 语句不起作用

    我正在学习如何将 SQL 与 Java 结合使用 我已成功安装 JDBC 驱动程序 并且能够从数据库读取记录并将其打印在屏幕上 我的问题发生在尝试执行更新或插入语句时 没有任何反应 这是我的代码 问题所在的方法 public static
  • Cucumber DataTable 错误 - io.cucumber.datatable.UndefinedDataTableTypeException:无法将 DataTable 转换为 cucumber.api.DataTable

    尝试使用 cucumber selenium java intelliJ 运行场景 但在其中一个步骤中出现有关 DataTable 的错误 在我开始使用测试运行程序并更改周围的一些内容之前 数据表工作正常并正确转换该步骤的参数 但我就是无法
  • 是否有最新的 Facebook Java SDK? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 好像没找到最近更新的 如果没有 是否有一个好的 Java 库来执行与 Facebook 的 API 交
  • 从 Android 访问云存储

    我一直无法找到任何有关如何从 Android 应用程序使用云存储的具体文档 我确实遇到过这个客户端库 https cloud google com storage docs reference libraries然而 Google Clou
  • MongoDB java 驱动程序 3.0 在身份验证时无法捕获异常

    我超级卡住o 0 在尝试通过 Java 驱动程序进行身份验证时 存在捕获异常的问题 正如你可能会看到的Throwable类不工作 private MongoClient mongoClient private MongoDatabase m
  • 使用 HTTPServletRequestWrapper 包装请求参数

    我有一个可以验证 授权 REST 调用的过滤器 该过滤器需要访问请求参数 因此我为此编写了一个自定义 HTTPServletRequestWrapper import java util Collections import java ut
  • Jetty Plugin 9启动不喜欢icu4j-2.6.1.jar

    我对 mortbay 的 Maven jetty 插件 6 有相同的配置
  • 如何检查日期字符串的有效性?

    在我的项目中 我需要检查日期字符串是否计算为正确的日期对象 我决定允许 yyyy MM dd 和日期格式 年 月 日 和 年 月 日 小时 分钟 我如何检查它们是否有效 我的代码为 1980 01 01 和一些奇怪的日期 如 3837 05
  • JPA 将 BigDecimal 作为整数保存在数据库中

    我在数据库中有这个字段 ITEMCOST NUMERIC 13 DEFAULT 0 NOT NULL 在JAVA中 Entity中的字段定义如下 Column name ITEMCOST private BigDecimal itemCos
  • 如何清理 Runtime.exec() 中使用的用户输入?

    我需要通过命令行调用自定义脚本 这些脚本需要很少的参数并在 Linux 机器上调用 当前版本容易出现各种shell注入 如何清理用户给出的参数 参数包括登录名和路径 Unix 或 Windows 路径 用户应该能够输入任何可能的路径 该路径
  • 如何使用 Jest 从 ElasticSearch 获取索引列表

    我正在尝试使用 Jest 检索索引列表 但我只得到 Stats statistics new Stats Builder build result client execute statistics 如何从结果中检索索引列表 除了统计之外

随机推荐

  • 更改 QTreeView 的行背景颜色不起作用

    我有一个QTreeView并希望根据行的内容使用不同的背景颜色 为了实现这一目标 我导出了一个class MyTreeView from QTreeView并实现了paint方法如下 void MyTreeView drawRow QPai
  • 为什么 strchr 采用 int 来查找 char?

    The strchrC 标准库中的函数寻找char在一个字符串中 但它的签名需要一个int为搜索字符 在我发现的这两个实现中 该实现投射了这个int to a char char strchr const char s int c whil
  • 在 PowerShell 中使用适用于 Windows 的 Git 时使用脱字符号 (^)

    我在 PowerShell 命令行中使用 git 并且我尝试使用类似的东西 git difftool HEAD Powershell 似乎将其视为我输入的 git difftool HEAD 所以插入符号消失了 如果我使用插入符号的多个副本
  • MySQL 提交和事务

    我有一个关于 MySQL 提交和事务的问题 我有几个执行 MySQL 查询的 PHP 语句 我只说下面这些吗 mysql query START TRANSACTION more queries here mysql query COMMI
  • 在 Apache 中处理 CORS 预检请求

    我有一个使用 Yeoman 部署的 AngularJS 应用程序 Cakephp RESTful 后端 Angular 应用程序发送 OPTIONS 预检请求 后端以禁止 403 响应 在 nginx 中为了解决这个问题我使用了这个 if
  • 如何最好地处理构造函数中的异常?

    如何在构造中以最好的方式处理异常 option1 捕获创建对象的异常 class Account function construct id if empty id throw new My Exception id can t be em
  • ggplot2中的默认线型?

    我在这里努力找出 ggplot2 中使用的默认线型 我有一个数据框如下 test lt structure list time c 151 04167175293 151 125015258789 151 20832824707 151 2
  • 为什么涉及虚拟继承时不能使用static_cast向下转型?

    考虑以下代码 struct Base struct Derived public virtual Base void f Base b new Derived Derived d static cast
  • 在远程Linux主机上执行本地脚本

    我有一个本地脚本 如果没有远程主机上的 root 权限 该脚本将无法运行 我已编辑并允许 sudoers 文件从主目录 home username script 运行脚本 该脚本使用结果创建一个 txt 文件 但我将输出重定向到终端 并将输
  • 使用 msbuild 从命令行创建应用程序包

    我可以使用向导从 Visual Studio 2013 创建应用程序包 结果文件是MyProject Win8 1 1 1 3 x86 x64 arm bundle appxupload 这很好 我可以使用以下命令来构建 appxuploa
  • “__MSG_@@extension_id__”不起作用,并且网络字体无法加载

    我正在开发一个 Google Chrome 扩展 它将样式表注入到我定义的特定网站中manifest json 样式表中包含网络字体 font face and src url chrome extension MSG extension
  • 通过 git hook 缩小 CSS 文件

    我的理想情况是自动缩小 CSS 文件并将它们添加到 git 提交中 我不确定是否可以完成下面的 4 但我希望执行以下流程 修改CSS文件 添加到暂存区 Commit 运行更新缩小文件并将其添加到提交的脚本 提交完成 如果有其他方法 我也会对
  • 在 JavaScript 中删除对象

    我对 JavaScript 有点困惑delete操作员 采取以下代码 var obj helloText Hello World var foo obj delete obj 这段代码执行完后 obj is null but foo仍然指的
  • 使用 tm 和 RWeka 创建 N-Grams - 适用于 VCorpus,但不适用于 Corpus

    遵循许多创建指南biGrams使用 tm 和 RWeka 包 我感到沮丧的是 只有1 Grams被退回tdm 通过多次试验和错误 我发现使用 实现了正确的功能VCorpus 但不使用 Corpus 顺便说一句 我很确定这在 1 个月前与 C
  • ggplot2 有没有一种简单的方法来包装注释文本?

    我目前正在使用ggplot2和注释函数 文档中的示例如下 我对未知长度的文本进行注释的宽度有限 并且需要一种自动方式将其包装在一些文本中x start and x end价值观 由于我不想更改字体大小 因此我还需要移动y值取决于引入的中断数
  • x86-64 在寄存器中传递参数的顺序

    我对 x86 64 环境中的参数传递过程感到好奇 因此我编写了一段代码 a c extern int shared int main int a 100 swap a shared b c int shared 1 void swap in
  • 使用 PowerShell 在目录上递归运行简单命令

    使用 DOS 脚本或 PowerShell 在目录及其所有子目录上运行此简单命令的最快方法是什么 convert filename jpg resize 620x620 R processed filename jpg 单个目录的 DOS
  • jquery ajax 休息调用 - 不支持的媒体类型

    我正在对休息服务进行简单的 jquery ajax 调用 我将 contentType 设置为 application json 其余资源配置为接受 MediaType APPLICATION JSON 这是一个 POST 方法 通过这个设
  • ASP.NET MVC Html.ValidationSummary(true) 不显示模型错误

    我对 Html ValidationSummary 有一些问题 我不想在 ValidationSummary 中显示属性错误 当我设置 Html ValidationSummary true 时 它不会显示来自 ModelState 的错误
  • 在 Java 中使用 MANIFEST.MF 文件

    我注意到 JAR WAR 和 EAR 文件有一个MANIFEST MF文件下的META INF folder 有什么用MANIFEST MF文件 该文件中可以指定哪些内容 使用 Java 开发工具包 1 0 版创建的 JAR 文件中的 Ma