当前位置: 首页 > news >正文

你对MANIFEST.MF这个文件知道多少?

前言


我们在读源码过程中,经常看到每个jar包的METE-INF目录下有个MANIFEST.MF文件,这个文件到底是做什么的呢?

在计算机领域中,"manifest" 通常指的是一份清单或概要文件,用于描述一组文件或资源的内容和属性。在 Java 中,MANIFEST.MF 文件就是一种用于描述 JAR 文件中包含的类和资源的清单文件,其中包含了一些元数据信息和属性。

至于为什么要将清单文件命名为 "MANIFEST.MF",可能是因为这个文件最早是在早期的 UNIX 系统中使用的,而在 UNIX 中,".manifest" 是一种用于描述软件包或文件集合的文件名后缀。因此,Java 在设计 JAR 文件时可能也采用了这个后缀,以便于与 UNIX 系统中的相关工具和标准兼容。而 ".MF" 则是指该文件的格式是基于 Manifest 文件格式(MF,Manifest File Format)的,这也是 JAR 文件格式中的一部分。

MANIFEST.MF 概述


MANIFEST.MF 文件是 Java 打包工具(如 jar、war、ear 等)中必须存在的一个文件,用于描述打包文件的元信息。它的主要作用有以下两个方面:

  1. 指定打包文件中的主类

MANIFEST.MF 文件中的 Main-Class 属性可以指定打包文件中的主类,这个主类将会在运行时被启动。当我们使用 java -jar 命令运行一个 JAR 文件时,Java 运行时会读取 MANIFEST.MF 文件,找到 Main-Class 属性指定的类,并执行该类的 main() 方法。
  1. 存储打包文件的元信息

MANIFEST.MF 文件中还可以包含其他自定义属性,用于存储打包文件的元信息。例如,可以指定打包文件的版本号、作者、描述信息等。这些属性可以在运行时被读取,以提供更多的应用程序信息。

除了可以由打包工具自动生成 MANIFEST.MF 文件之外,我们也可以手动创建和编辑该文件,以添加自定义的属性。例如,我们可以使用文本编辑器创建一个名为 MANIFEST.MF 的文件,然后将以下内容保存到该文件中:

MANIFEST.MF有哪些配置项


  1. Manifest-Version
    指定 MANIFEST.MF 文件的版本号。例如
    Manifest-Version: 1.0

  1. Main-Class
    指定打包文件的主类。例如
    Main-Class: com.example.MyMainClass

  1. Class-Path
    指定该 JAR 文件的类路径,以便在运行时加载其他类。例如:
    Class-Path: lib/other.jar lib/some.jar

  1. Created-By
    指定生成该 JAR 文件的工具和版本号。例如:
    Created-By: Apache Maven 3.6.3

  1. Implementation-Title
    指定该 JAR 文件的实现标题。例如:
    Implementation-Title: My Application

  1. Implementation-Version
    指定该 JAR 文件的实现版本。例如
    Implementation-Version: 1.0.0-SNAPSHOT

  1. Implementation-Vendor
    指定该 JAR 文件的实现厂商。例如:
    Implementation-Vendor: Acme Corporation

  1. Implementation-Vendor-Id
    指定该 JAR 文件的实现厂商 ID。例如:
    Implementation-Vendor-Id: com.acme

  1. Specification-Title
    指定该 JAR 文件的规范标题。例如:
    Specification-Title: My Application API

  1. Specification-Version
    指定该 JAR 文件的规范版本。例如
    Specification-Version: 1.0.0

  1. Specification-Vendor
    指定该 JAR 文件的规范厂商。例如
    Specification-Vendor: Acme Corporation

  1. Sealed
    指定该 JAR 文件是否被封闭,即是否允许其他 JAR 文件修改该 JAR 文件中的类文件。例如:
    Sealed: true

MANIFEST.MF是被谁读取解析的


在 Java 中,MANIFEST.MF 文件通常被 Java 虚拟机(JVM)或相关的工具读取和解析。

例如,当我们在命令行使用 "java -jar" 命令运行一个打包成 JAR 文件的 Java 应用程序时,JVM 会读取 JAR 文件中的 MANIFEST.MF 文件来确定应用程序的主类,从而启动应用程序。

此外,也有许多其他的工具和库可以读取和解析 MANIFEST.MF 文件,

例如 Maven 和 Gradle 等构建工具,以及一些用于操作 JAR 文件的 Java 库,如 Java Archive (JAR) API 等。这些工具和库通常会使用 Java 类库中的 java.util.jar.Manifest 类来解析 MANIFEST.MF 文件,并将其转换为 Java 对象,以便于后续的操作和使用

MANIFEST.MF是所有的jar包必须要有的吗


不是所有的 JAR 文件都必须要包含 MANIFEST.MF 文件。在 Java 中,JAR 文件可以包含两种类型的条目:一种是类文件,另一种是元数据文件(如 MANIFEST.MF)。如果 JAR 文件中不包含 MANIFEST.MF 文件,则默认使用一个空的 MANIFEST.MF 文件。

但是,在某些情况下,我们可能需要在 MANIFEST.MF 文件中指定一些属性,例如应用程序的主类,或者其他的元数据信息。在这种情况下,我们就需要手动创建一个 MANIFEST.MF 文件,并将其添加到 JAR 文件中。

相关文章:

你对MANIFEST.MF这个文件知道多少?

前言我们在读源码过程中,经常看到每个jar包的METE-INF目录下有个MANIFEST.MF文件,这个文件到底是做什么的呢?在计算机领域中,"manifest" 通常指的是一份清单或概要文件,用于描述一组文件或资源的内容和属性。…...

史上最经典垃圾回收器(CMS,G1)详解、适用场景及特点、使用命令

文章目录垃圾收集器介绍总结各个垃圾收集器之间的关系垃圾收集器使用命令及默认值详解各个垃圾收集器SerialParNewParallel ScavengeSerial OldParallel OldCMS(Concurrent Mark Sweep)G1(Garbage First)适用场景及推荐垃圾收集器介绍总结 垃圾收集器可以帮助我们进行具体的垃…...

Hive查询中的优化

目录前言优化策略推荐使用group by代替distinct去重前言 优化策略 推荐使用group by代替distinct去重 参考: hive中groupby和distinct区别以及性能比较 - cnblogs数据倾斜之count(distinct) - cnblogs 重要结论: 两者都会在map阶段count&#xff0c…...

【开发规范】go项目开发中的[流程,git,代码,目录,微服务仓库管理,静态检查]

文章目录前言一、有哪些规范我们应该遵循二、项目开发流程三、git的代码分支管理1. 分支管理2. commit规范三、go的代码规范四、go项目目录规范五、微服务该采用multi-repo还是mono-repo?1. 引言2. Repos 是什么?3. 什么是 Mono-repo?4. Mono-repo 的劣势5. 什么是…...

数组初始化方式与decimal.InvalidOperation

数组初始化方式与decimal.InvalidOperation调用函数主函数: 数组声明不同带来的报错与否1. 报错decimal.InvalidOperation的数组初始化版本2. 可行的初始化版本输出结果1. 报错时的内容2. 正常的输出计算结果原因(是否是数组与列表不同引起(?…...

【Opencv-python】之入门安装

目录 一、安装Python 1. 登录官网https://www.python.org/downloads/ 2. 任选一个版本,下载Python 3. 安装Python 记得勾选下图的Add Python 3.6 PATH, 添加python到环境变量的路径,然后选择Install now​编辑 4. 验证是否安装成功 5.退出 二、安装…...

MySQL进阶(二)

目录 1、视图 1、检查选项 2、视图的更新 3、视图作用 2、存储过程 1、语法 2、变量 1、系统变量 2、用户定义变量 3、局部变量 3、if 4、参数 5、case 6、循环 1、while 2、repeat 3、loop 7、游标、条件处理程序 8、存储函数 3、触发器 4、锁 1、全局锁 2、表级锁 …...

热爱所有热爱

想成为这样的一个人,在工作中是一名充满极客精神的Programmer,处理遇到的问题能够游刃有余,能够做出优雅的设计,写出一手优秀的代码,还有着充分的学习能力和业务能力,做一名职场中的佼佼者。 在工作之余还能…...

Redis学习之数据删除与淘汰策略(七)

这里写目录标题一、Redis数据特征二、过期数据三、过期数据删除策略3.1 数据删除策略的目标3.2 定时删除3.3 惰性删除3.4 定期删除3.5 删除策略对比3.6 实际应用四、数据淘汰策略4.1 淘汰策略概述4.2 策略配置一、Redis数据特征 Redis是一种内存级数据库,所有的数据…...

HashMap 面试专题

1、HashMap 的底层结构 ①JDK1.8 以前 JDK1.8 之前 HashMap 底层是 数组和链表 结合在一起使用也就是 链表散列。HashMap 通过 key 的hashCode 函数处理过后得到 hash 值,然后通过 (n - 1) & hash 判断当前元素存放的位置(这里的 n 指的是数组的长度…...

域组策略自动更新实验报告

域组策略自动更新实验报告 域组策略自动更新实验报告 作者: 高兴源 1要求、我公司为了完善员工的安全性和系统正常漏洞的维护,所以采用域组策略自动更新的方法来提高账户安全性,减少了用户的错误。 1.实验环境如下1台2008r2一台创建域,一台wi…...

Java自定义生成二维码(兼容你所有的需求)

1、概述作为Java开发人员,说到生成二维码就会想到zxing开源二维码图像处理库,不可否认的是zxing确实很强大,但是实际需求中会遇到各种各样的需求是zxing满足不了的,于是就有了想法自己扩展zxing满足历史遇到的各种需求&#xff0c…...

Spring事务的隔离级别

事务隔离级别解决的是多个事务同时调⽤⼀个数据库的问题 事务传播机制解决的是⼀个事务在多个节点(⽅法)中传递的问题 事务的特性: 隔离性:多个事务在并发执行的时候,多个事务执行的一个行为模式,当一个事务执行的时候,另一个事务执行的一个行…...

JVM系统优化实践(4):以支付系统为例

您好,我是湘王,这是我的CSDN博客,欢迎您来,欢迎您再来~前面说过,JVM会将堆内存划分为年轻代、老年代两个区域。年轻代会将创建和使用完之后马上就要回收的对象放在里面,而老年代则将创建之后需要…...

16- TensorFlow实现线性回归和逻辑回归 (TensorFlow系列) (深度学习)

知识要点 线性回归要点: 生成线性数据: x np.linspace(0, 10, 20) np.random.rand(20)画点图: plt.scatter(x, y)TensorFlow定义变量: w tf.Variable(np.random.randn() * 0.02)tensor 转换为 numpy数组: b.numpy()定义优化器: optimizer tf.optimizers.SGD()定义损失: …...

无自动化测试系统设计方法论

灵活 敏捷 迭代。 自动化测试 辩思 测试必不可少 想想看没有充分测试的代码, 哪一次是一次过的? 哪一次不需要经历下测试的鞭挞? 不要以为软件代码容易改, 就对于质量不切实际的自信—那是自大! 不适用自动化测试的case 遗留系统。太多的依赖方, 不想用过多的mock > …...

架构初探-学习笔记

1 什么是架构 有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。 1.1 单机架构 所有功能都实现在一个进程里,并部署在一台机器上。 1.2 单体架构 分布式部署单机架构 1.3 垂直应用架构 按应用垂直切分的单体架构 1.4 SOA架构 将…...

在成都想转行IT,选择什么专业比较好?

很多创新型的互联网服务公司的核心其实都是软件,创新的基础、运行的支撑都是软件。例如,软件应用到了出租车行业,就形成了巅覆行业的滴滴;软件应用到了金融领域,就形成互联网金融;软件运用到餐饮行业,就形成美团;软件运…...

【Spark分布式内存计算框架——Spark Streaming】4.入门案例(下)Streaming 工作原理

2.3 Streaming 工作原理 SparkStreaming处理流式数据时,按照时间间隔划分数据为微批次(Micro-Batch),每批次数据当做RDD,再进行处理分析。 以上述词频统计WordCount程序为例,讲解Streaming工作原理。 创…...

2、算法先导---思维能力与工具

题目 碎纸片的拼接复原(2013B) 内容 破碎文件的拼接在司法物证复原、历史文献修复以及军事情报获取等领域都有着重要的应用。传统上,拼接复原工作需由人工完成,准确率较高,但效率很低。特别是当碎片数量巨大,人工拼接很难在短时…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...