MANIFEST.MF是个什么?
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.MF和 maven文件夹
maven文件夹下面包含pom.xml和pom.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是个什么?的更多相关文章
- 关于java中的MANIFEST.MF 文件内容
打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录, 这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息.可以简化Java应用程 ...
- jar包目录下MANIFEST.MF标准格式
jar包目录格式: |-- com | |-- test.class |-- META-INF | |-- MAINFEST.MF 一个正常的jar包下必有META-INF/MANIFEST.MF清单 ...
- 采用MANIFEST.MF之jar报错ClassNotFoundException解法
检查n多遍也试了n多次,证明下面是MANIFEST.MF文件正确写法: Manifest-Version: 1.0 Premain-Class: cn.yandz.monitor.SizeOfObje ...
- RCP: MANIFEST.MF, plugin.xml, build.properties三种文件的区别
在Eclipse插件开发中, MANIFEST.MF, plugin.xml, build.properties是三种最常见的文件,由于它们共享同一个编辑器(Plug-in Manifest Edit ...
- MANIFEST.MF的用途(转载)
MANIFEST.MF的用途(转载) 可以用的上的有: 1. Main-Class 指定程序的入口,这样可以直接用java -jar xxx.jar来运行程序. 2. Class-Path 指定jar ...
- 打包文件 MANIFEST.MF 功能详解
最近研究了如何在java工程打包,期间遇到的一些问题进行总结,如打包成test.jar 文件 Manifest-Version: 1.0 Main-Class: windows.VideoWindow ...
- maven-bundle-plugin 2.4.0以下版本导出META-INF中的内容到MANIFEST.MF中
今天终于把maven-bundle-plugin不能导出META-INF中的内容到Export-Package中的问题解决了,因为用到的第三方JAR包需要加载META-INF/XX/XX.xml这个内 ...
- 更新jar包中的MANIFEST.MF
当前目录存在lib.jar和MANIFEST.MF文件,在当前目录下执行: jar -uvfm lib.jar MANIFEST.MF 如果lib.jar里存在META-INF/MANIFEST.MF ...
- [转] - JAR文件包及jar命令详解 ( MANIFEST.MF的用法 )
常常在网上看到有人询问:如何把 java 程序编译成 .exe 文件.通常回答只有两种,一种是制作一个可执行的 JAR 文件包,然后就可以像. chm 文档一样双击运行了:而另一种是使用 JET 来进 ...
- jar MANIFEST.MF 汇总
: Manifest-Version: 1.0Created-By: Apache Ant 1.5.1Extension-Name: Struts FrameworkSpecification-Tit ...
随机推荐
- MySQL升级-CentOS6.8
在腾讯云购买的服务器自带的MySQL是5.1版本的,相对于最新版的5.7差了很多特性,在平时的项目练习中使用到了MySQL也会遇到一些奇葩的错误,很有必要升级到至少5.5版本以上. 步骤: 1.备份数 ...
- Python网络爬虫练习
1. 豆瓣top250电影 1.1 查看网页 目标网址:https://movie.douban.com/top250?start=0&filter= start=后面的数字从0,25,50一 ...
- C++11之STL多线程
STL库跨平台: VS2010不支持std::thread库,至少VS2012/2013及其以上可以: 一.库概要 (1)std::thread成员函数 thread(fun, args...); / ...
- Python Web实战:Python+Django+MySQL实现基于Web版的增删改查
前言 本篇使用Python Web框架Django连接和操作MySQL数据库学生信息管理系统(SMS),主要包含对学生信息增删改查功能,旨在快速入门Python Web,少走弯路.效果演示在项目实战最 ...
- 随笔 - B树算法实现
写代码之前,再回顾一下B树是什么,满足什么样的规则 B树规则: 排序方式:所有节点关键字是按递增次序排列,并遵循左小右大原则 子节点数:非叶节点的子节点数>1,且<=M ,且M>=2 ...
- SORM框架01
架构图 Query接口:负责查询(对外提供的核心服务类) QueryFactory类:负责根据配置信息创建Query对象 TypeConvertor接口:类型转换 TableContext类:负责获取 ...
- Python脚本:实现excel表格导入到数据库,支持mysql,postgresql,MongoDB
import xlrd,re from datetime import datetime from xlrd import xldate_as_tuple # 判断上传表格是否与模板要求一致 def ...
- ubuntu软件管理工具的使用——dpkg和apt
deb.rpm.tar.gz三种Linux软件包的区别在哪里呢,这种区别可能使安装进行不下去,那么我们应该下载什么格式的包呢?下面具体讲解一下. rpm包是在Redhat.Suse和Fedora可以直 ...
- JetBrains PyCharm 2018.2.4 x64 工具里如何安装bs4
第一步:点击File->Settings 第二步:选择Project:workplace-->Project Interpreter,然后再点击右上角的"+"按钮进入下 ...
- Unity2D模拟控制位移
using UnityEngine; using System.Collections; public class PlayerController : MonoBehaviour { public ...