MANIFEST.MF是个什么?

写这篇文件主要记录JRA文件里面到底是什么?然后MANIFEST.MF又是什么?Springboot 如何只有Main方法就可以运行的?

Springboot项目打包

Java开发中JRA包中经常会看到这个文件中。Springboot打包也会生成对应的JRA,下图我们用maven命令直接编译打包

执行mvn clean package -DskipTests=true -P test,生成的文件如下

  • 这个JAR我们分两部分来讲解请看下图

BOOT-INF 注意了这个是我们自己写的代码生成的class和配置文件
META-INF 包含了MANIFEST.MFmaven文件夹

maven文件夹下面包含pom.xmlpom.properites文件
pom.xml 是代表的整个项目引用的第三方jar的maven坐标,如Spring 等
pom.properites 是当前执行 package 命令后打包当前项目的版本信息,
就如下面,是不是简单明了呀。

#Generated by Apache Maven
#Fri May 29 16:56:23 CST 2020
version=1.0-SNAPSHOT
groupId=com.xxx
artifactId=xxxxxService

MANIFEST.MF 来源

接下来看打包文件中的MANIFEST.MF

Manifest-Version: 1.0
Implementation-Title: xxxxService
Implementation-Version: 1.0-SNAPSHOT
Archiver-Version: Plexus Archiver
Built-By: tony
Implementation-Vendor-Id: com.xx
Spring-Boot-Version: 1.5.10.RELEASE
Implementation-Vendor: Pivotal Software, Inc.
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.xxx.xxxxApplication
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Created-By: Apache Maven 3.5.3
Build-Jdk: 1.8.0_144
Implementation-URL: http://projects.spring.io/spring-boot/xxxAdminService/

直接看上面的内容,遇到问题我们先挑选容易的来看。

一般属性

1、 Manifest-Version
用来定义manifest文件的版本,例如:Manifest-Version: 1.0

2、Built-By

3、Spring-Boot-Version
等等这些都是很简单的熟悉

包扩展属性

1、Implementation-Title 定义了扩展实现的标题
2、 Implementation-Version 定义扩展实现的版本
3、 Implementation-Vendor 定义扩展实现的组织
4、 Implementation-Vendor-Id 定义扩展实现的组织的标识
5、 Implementation-URL : 定义该扩展包的下载地址(URL)

项目加载文件相关属性

1、Spring-Boot-Classes: BOOT-INF/classes/
2、Spring-Boot-Lib: BOOT-INF/lib/

应用程序相关属性

1、Main-Class

org.springframework.boot.loader.JarLauncher 这个很重要,很重要,是当前JRA的启动类, 定义jar文件的入口类,该类必须是一个可执行的类,一旦定义了该属性即可通过 java -jar x.jar来运行该jar文件。

2、Start-Class
com.jc.xxxApplication 这个是你自己项目的启动执行类的开始,我这里是Springboot的main方法的开始

import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;@EnableScheduling
@MapperScan(basePackages = "com.xxxxx.mapper")
@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
public class xxxxApplication {public static void main(String[] args) {SpringApplication.run(xxxxAdminApplication.class, args);}}

入口

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//package org.springframework.boot.loader;import org.springframework.boot.loader.archive.Archive;
import org.springframework.boot.loader.archive.Archive.Entry;public class JarLauncher extends ExecutableArchiveLauncher {static final String BOOT_INF_CLASSES = "BOOT-INF/classes/";static final String BOOT_INF_LIB = "BOOT-INF/lib/";public JarLauncher() {}protected JarLauncher(Archive archive) {super(archive);}protected boolean isNestedArchive(Entry entry) {return entry.isDirectory() ? entry.getName().equals("BOOT-INF/classes/") : entry.getName().startsWith("BOOT-INF/lib/");}public static void main(String[] args) throws Exception {(new JarLauncher()).launch(args);}
}

看到上面的代码没有JarLauncher,上面的第一张截图中红框标出来的,
这个就是 执行java -jar 的入口。这个类里面会加载我们写代码编译出来的文件。

我这个JAR是Springboot项目打包生成的,JarLauncher 会加载上面第二张截图中的class 和配置文件。

大家有兴趣可以看看org/springframework/boot/loader 下面的类,这个包下面着重讲解了Springboot 如何只有Main方法就可以运行加载我们编译的class和配置文件。

总结

以上就是Springboot如何优雅运行java -jar xxx.jar

MANIFEST.MF是个什么?相关推荐

  1. MANIFEST.MF文件的格式

    MANIFEST.MF文件的格式 1. 基本格式 属性名称+:+空格+属性值 2. 没行最多72个字符,换行继续必须以空格开头 3. 文件最后必须要有一个回车换行 4. Class-Path 当前路径 ...

  2. java jar包中MANIFEST.MF中有版本信息

    有时候查看人家的源代码,但有可能该软件有很多个版本,这个时候就可以通过 MANIFEST.MF来查看当前项目引用的是哪个版本.当然了如果本身jar包名已经是用版本号来命名的.则不需要这样查看. 可以参 ...

  3. MANIFEST.MF文件全面解析

    (一)简介 当我们用Jar命令打完包后,会在根目录下面创建META-INF目录,该目录下面会有一些对该Jar包信息的描述,其中肯定会有一个MANIFEST.MF文件,该文件包含了该Jar包的版本.创建 ...

  4. Android APK 签名文件MANIFEST.MF、CERT.SF、CERT.RSA分析

    首先我们找一个已经签名的apk文件,修改后缀名为zip,然后解压.可以看到里面有一个META-INF文件夹,里面就是签名验证的文件.有三个文件MANIFEST.MF.CERT.SF.CERT.RSA分 ...

  5. manifest.mf._MANIFEST.MF和feature.xml版本控制规则

    manifest.mf. 我永远都忘记了OSIF插件和功能的 MANIFEST.MF和feature.xml中的依赖项声明的规则是什么. 谷歌搜索经常导致沮丧而不是答案. 因此,因为今天我实际上找到了 ...

  6. MANIFEST.MF和feature.xml版本控制规则

    我永远忘记了OSIF插件和功能的 MANIFEST.MF和feature.xml中的依赖项声明的规则是什么. 谷歌搜索经常导致沮丧而不是答案. 所以,因为今天我实际上找到了这些规则的简要列表,所以我想 ...

  7. Java 打 jar 包时,MANIFEST.MF 文件详解

    具体详情,详见<MANIFEST.MF文件详解> manifest.mf 的编写规则 不能有空行和空格的地方 第一行不可以是空行(第一行的行前不可以有空行),行与行之间不能有空行,每行的行 ...

  8. Springboot读取jar包中的MANIFEST.MF文件内容

    Springboot打包成可执行jar包后,包结构如下所示: 工程编译后的文件都在BOOT-INF/classes目录下,如果需要读取并显示META-INF/MANIFEST.MF文件内容,那么可以用 ...

  9. IDEA打jar包时出现manifest.mf already exists in vfs解决办法

    1.什么是MANIFEST.MF 下面MANIFEST.MF的介绍来自百度百科http://baike.baidu.com/link?url=QQ97CnYdkb0RqF33qFh9XiRfF_2NG ...

  10. MANIFEST.MF的用途(转载)

    可以用的上的有: 1. Main-Class 指定程序的入口,这样可以直接用java -jar xxx.jar来运行程序. 2. Class-Path 指定jar包的依赖关系,class loader ...

最新文章

  1. 利用jqueryRotare实现抽奖转盘
  2. kotlin学习之密封类(五)
  3. 移动云2020 H1营收44.57亿元,同比增长556.4%
  4. java手机象棋软件下载,Java手机网络版象棋游戏附源码JAVA游戏源码下载
  5. 洛达官方软件检测_关于购买HQB洛达耳机的你需要知道的!!!
  6. ES6读书笔记(一)
  7. 非Json字符串转map对象
  8. YALMIP工具箱之解决半定规划问题的SDPT3求解器安装
  9. js 实现井字棋游戏
  10. 计算机一级两列怎么筛选,怎么筛选Excel软件两个表格里相同的数据
  11. 什么是 PID 控制算法 ?详解
  12. 我用java写了个壁纸软件
  13. 苹果6严重卡顿_苹果手机iOS系统: 如果开放系统降级通道会怎么样?
  14. c语言中 if(x) 、if(0) 、if(1)
  15. 【JSON数据】中国各省份省会城市经纬度 JSON
  16. 拓嘉启远电商:拼多多直通车烧钱太多的原因
  17. UTM-wgs84投影坐标系
  18. 绝对值不等式解绝对值二次函数的最值_Simplelife_新浪博客
  19. Discuz安装与配置
  20. 春节“年味地图”出炉:烤鸭一飞冲天,成全国人气榜首

热门文章

  1. 关于springboot项目(@SpringBootTest单元测试类)找不到配置文件问题
  2. 一文总结 Shiro 实战教程
  3. 什么是Spring、Spring的优点
  4. 开放平台设计之接口签名认证
  5. Axure RP9教程 内部框架
  6. 注入神器-----SqlMap的使用
  7. 【漫画】各大互联网公司的真实“人”生
  8. bat脚本中如何多次键盘输入并判断_万花筒自动发布信息脚本【操作简单】
  9. Canvas百战成神-圆(1)
  10. 状态机思路在嵌入式开发中的应用说明及注意事项(普罗米修斯中不少功能节点用了状态机的方法来写)