Spring Boot war包&jar包对比
使用 Maven对SpringBoot程序进行打包处理有两种格式:
一种是war包,一种是jar包。
虽然我们将springboot应用打包成了war包,但是我们依然可以使用 java -jar的方式来运行。
如何将应用打包成war包:
1、将pom.xml文件中的打包方式改为 :<packaging>war</packaging>
2、然后添加一个类,这个类继承 SpringBootServletInitializer 类,并且重写了里面的 configure() 方法。
package com.thunisoft.eurekaserver; import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer; public class ApplicationWebStarter extends SpringBootServletInitializer { @Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(EurekaserverApplication.class);
}
}
然后可以直接使用 maven 去打包应用,这一点没有区别。
下面我们就来研究一下这两种打包方式,产出的文件结构有什么不同;
1、首先看一下打包成war包的方式:
文件夹 PATH 列表
卷序列号为 CE2F-63AD
C:\USERS\ADMINISTRATOR\DESKTOP\EUREKA-WAR
├─META-INF
│ │ MANIFEST.MF
│ │
│ └─maven
│ └─com.thunisoft
│ └─eurekaserver
│ pom.properties
│ pom.xml
│
├─org
│ └─springframework
│ └─boot
│ └─loader
│ │ ExecutableArchiveLauncher$1.class
│ │ ExecutableArchiveLauncher.class
│ │ ......
│ │ ......
│ │ WarLauncher.class
│ │
│ ├─archive
│ │ Archive$Entry.class
│ │ Archive$EntryFilter.class
│ │ ......
│ │ ......
│ │ JarFileArchive.class
│ │
│ ├─data
│ │ ByteArrayRandomAccessData.class
│ │ ......
│ │ ......
│ │ RandomAccessDataFile.class
│ │
│ ├─jar
│ │ AsciiBytes.class
│ │ Bytes.class
│ │ CentralDirectoryEndRecord.class
│ │ ......
│ │ ......
│ │ CentralDirectoryVisitor.class
│ │ FileHeader.class
│ │
│ └─util
│ SystemPropertyUtils.class
│
└─WEB-INF
├─classes
│ │ application.yml
│ │ bootstrap.yml
│ │
│ └─com
│ └─thunisoft
│ └─eurekaserver
│ ApplicationWebStarter.class
│ EurekaserverApplication.class
│
└─lib
antlr-2.7.7.jar
antlr-runtime-3.4.jar
......
......
......
aopalliance-1.0.jar
archaius-core-0.7.4.jar
2、然后我们看一下jar包的打包目录
文件夹 PATH 列表
卷序列号为 CE2F-63AD
C:\USERS\ADMINISTRATOR\DESKTOP\EUREKA-JAR
├─BOOT-INF
│ ├─classes
│ │ │ application.yml
│ │ │
│ │ └─com
│ │ └─thunisoft
│ │ └─eurekaserver
│ │ EurekaserverApplication.class
│ │
│ └─lib
│ antlr-2.7.7.jar
│ antlr-runtime-3.4.jar
│ aopalliance-1.0.jar
│ ......
│ ......
│ ......
│ classmate-1.3.4.jar
│ commons-codec-1.10.jar
│ commons-collections-3.2.2.jar
│
├─META-INF
│ │ MANIFEST.MF
│ │
│ └─maven
│ └─com.thunisoft
│ └─eurekaserver
│ pom.properties
│ pom.xml
│
└─org
└─springframework
└─boot
└─loader
│ ExecutableArchiveLauncher$1.class
│ ExecutableArchiveLauncher.class
│ ......
│ ......
│ PropertiesLauncher.class
│ WarLauncher.class
│
├─archive
│ Archive$Entry.class
│ Archive$EntryFilter.class
│ ......
│ ......
│ JarFileArchive.class
│
├─data
│ ByteArrayRandomAccessData.class
│ RandomAccessData$ResourceAccess.class
│ ......
│ ......
│ RandomAccessDataFile$FilePool.class
│ RandomAccessDataFile.class
│
├─jar
│ AsciiBytes.class
│ Bytes.class
│ CentralDirectoryEndRecord.class
│ ......
│ ......
│ ......
│ FileHeader.class
│ JarURLConnection.class
│ ZipInflaterInputStream.class
│
└─util
SystemPropertyUtils.class
3、对比
对比之后我们发现,其实这两中打包方式解压后的目录结构大体上是相似的。
不同点:
1、首先如果是jar包,一般是这样三个目录: META-INF org BOOT-INF
2、war包的结构是,会将上面的 BOOT-INF 目录名 换成 WEB-INF
3、相对于jar包,war包里面会多出一个类SpringBootServletInitializer,这个类的存在就可以让我们把打包出的war包放入tomcat等一系列的容器中运行。
将jar包改为war包其实很容易,只需要更改BOOT-INF 为 WEB-INF,然后添加一个启动类,SpringBootServletInitializer,这样就可以直接将war包扔进容器中运行了,当然也可以使用jar -jar方式运行,但是里面的main方法是要存在的,不然只能放在容器中运行,不能使用命令行运行。
所以综上所述,使用war包比使用jar要更加方便,因为war可以有两种部署方式。
Spring Boot war包&jar包对比的更多相关文章
- 关于spring boot打出的jar包在Linux中运行
众所周知, spring boot打出的jar包可以通过 "java -jar xxx.jar"的方式来运行 但是在Linux中, 通过这个命令运行的话会占用该窗口, 当我们 Ct ...
- Spring Boot可执行Jar包运行原理
目录 1. 打可执行Jar包 2. 可执行Jar包内部结构 3. JarLauncher 4. 简单总结 5. 远程调试 Spring Boot有一个很方便的功能就是可以将应用打成可执行的Jar.那么 ...
- Spring Boot项目生成jar包,并在windows服务器中注册成服务,开机启动
背景: 使用Spring Boot开发的Web项目,打包生成了一个jar包,希望能部署在Windows服务器中 尝试: 1.Spring Boot生成的jar包,可以直接用java -jar运行,但是 ...
- spring boot开发,jar包一个一个来启动太麻烦了,写一个bat文件一键启动
spring boot开发,jar包一个一个来启动太麻烦了,写一个bat文件一键启动 @echo offcd D:\workProject\bushustart cmd /c "title ...
- Spring Boot部署之jar包运行
上篇阐述了Spring Boot war部署项目,本篇阐述另一种运行方式:jar包运行. 一.打jar包 1.修改pom.xml配置 2.执行package(对于module执行package之前需要 ...
- Spring Boot发布将jar包转为war包。
Spring Boot是支持发布jar包和war的,但它推荐的是使用jar形式发布.使用jar包比较方便,但如果是频繁修改更新的项目,需要打补丁包,那这么大的jar包上传都是问题.所以,jar包不一定 ...
- spring boot中,jar包、war包的区别
jar包.war包 比较(表格) 项目 jar包 war包 在开发调试完成之后,可以将应用打成JAR包的形式,可以直接使用Maven插件的package命令,最终会形成一个可运行的 JAR包.我们使用 ...
- Spring框架学习笔记(6)——阿里云服务器部署Spring Boot项目(jar包)
最近接外包,需要部署服务器,便是参考了网上的几篇博文,成功在阿里云服务器成功部署了Spring Boot项目,特记下本篇笔记 Spring Boot项目打包 这里说一下部署的一些问题 1.mysql驱 ...
- 1.Spring Boot入门及其jar包依赖模型分析
Spring Boot介绍 Spring Boot是由Pivotal团队提供的新框架,其设计目的是简化Spring应用的搭建以及开发过程.其目标是: 为所有Spring开发提供一个从根本上更快,且方便 ...
- 曹工杂谈:Linux服务器上,Spring Boot 原地修改 jar 包配置文件/替换class文件,免去重复上传的麻烦
一.前言 相信很多同学有这样的需求,现在很多公司都有多地的研发中心,经常需要跨地区部署,比如,博主人在成都,但是服务器是北京的.一般城市间网络都不怎么好,上传一个几十兆的jar包那是真的慢,别说现在微 ...
随机推荐
- LVS:三种负载均衡方式比较+另三种负载均衡方式
转:http://blog.csdn.net/u013256816/article/details/50705578 什么是LVS? 首先简单介绍一下LVS (Linux Virtual Serv ...
- Android入门-新手如何成功创建一个Android小应用
原文:http://android.eoe.cn/topic/summary 第一课程:Building Your First App [本课内容简介]欢迎加入到安卓应用的开发大潮中!这门课程会教授你 ...
- DBUtils查找最大的ID总是返回0
1.实体: public class Order { private int id; private Date orderDate; public int getId() { return id; } ...
- iOS_生成pem推送证书(用于百度云推送)
具体步骤如下: 首先,需要一个pem的证书,该证书需要与开发时签名用的一致. 具体生成pem证书方法如下: 1. 登录到 iPhone Developer Connection Portal(http ...
- Variance overview: Invariant, Covariant, Contravariant, 协变,逆变
- VS2010常用插件
- 读取word到二进制,再转成word
static void Main(string[] args) { try { var strParams = new Dictionary<string, string>(); stri ...
- hdu 3371 Connect the Cities(最小生成树)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3371 984ms风险飘过~~~ /************************************ ...
- python细节问题
1.list添加元素 a = [1, 2] print(id(a)) a += [3] print(id(a)) a = a + [4] print(id(a)) a.append(5) print( ...
- 纯html实现将网页页面分享到微信朋友圈添加缩略图图片的方法
在分享页面中的body中最前面添加一个隐藏的div,里面放一个300*300的正方形图片即可:如下 <div style="display:none"><img ...