使用 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包对比的更多相关文章

  1. 关于spring boot打出的jar包在Linux中运行

    众所周知, spring boot打出的jar包可以通过 "java -jar xxx.jar"的方式来运行 但是在Linux中, 通过这个命令运行的话会占用该窗口, 当我们 Ct ...

  2. Spring Boot可执行Jar包运行原理

    目录 1. 打可执行Jar包 2. 可执行Jar包内部结构 3. JarLauncher 4. 简单总结 5. 远程调试 Spring Boot有一个很方便的功能就是可以将应用打成可执行的Jar.那么 ...

  3. Spring Boot项目生成jar包,并在windows服务器中注册成服务,开机启动

    背景: 使用Spring Boot开发的Web项目,打包生成了一个jar包,希望能部署在Windows服务器中 尝试: 1.Spring Boot生成的jar包,可以直接用java -jar运行,但是 ...

  4. spring boot开发,jar包一个一个来启动太麻烦了,写一个bat文件一键启动

    spring boot开发,jar包一个一个来启动太麻烦了,写一个bat文件一键启动 @echo offcd D:\workProject\bushustart cmd /c "title ...

  5. Spring Boot部署之jar包运行

    上篇阐述了Spring Boot war部署项目,本篇阐述另一种运行方式:jar包运行. 一.打jar包 1.修改pom.xml配置 2.执行package(对于module执行package之前需要 ...

  6. Spring Boot发布将jar包转为war包。

    Spring Boot是支持发布jar包和war的,但它推荐的是使用jar形式发布.使用jar包比较方便,但如果是频繁修改更新的项目,需要打补丁包,那这么大的jar包上传都是问题.所以,jar包不一定 ...

  7. spring boot中,jar包、war包的区别

    jar包.war包 比较(表格) 项目 jar包 war包 在开发调试完成之后,可以将应用打成JAR包的形式,可以直接使用Maven插件的package命令,最终会形成一个可运行的 JAR包.我们使用 ...

  8. Spring框架学习笔记(6)——阿里云服务器部署Spring Boot项目(jar包)

    最近接外包,需要部署服务器,便是参考了网上的几篇博文,成功在阿里云服务器成功部署了Spring Boot项目,特记下本篇笔记 Spring Boot项目打包 这里说一下部署的一些问题 1.mysql驱 ...

  9. 1.Spring Boot入门及其jar包依赖模型分析

    Spring Boot介绍 Spring Boot是由Pivotal团队提供的新框架,其设计目的是简化Spring应用的搭建以及开发过程.其目标是: 为所有Spring开发提供一个从根本上更快,且方便 ...

  10. 曹工杂谈:Linux服务器上,Spring Boot 原地修改 jar 包配置文件/替换class文件,免去重复上传的麻烦

    一.前言 相信很多同学有这样的需求,现在很多公司都有多地的研发中心,经常需要跨地区部署,比如,博主人在成都,但是服务器是北京的.一般城市间网络都不怎么好,上传一个几十兆的jar包那是真的慢,别说现在微 ...

随机推荐

  1. 如何在ppt或word中添加高亮代码?

    如何在ppt或word中添加高亮代码? 问题: 如何ppt中添加带有语法高亮的程序代码,就如同下面的形式(在ppt嵌入高亮代码,且可以编辑,带有行号) 详细的要求如下: 1.代码带有语法高亮. 2.结 ...

  2. python3 装饰器应用举例

    [引子] python 中的装饰器是oop(面向对象编程)设计模式.之装饰器模式的一个应用.由于有语法糖衣的缘故.所以写起来也更加方便 [从一个比较经典的应用场景来讲解装饰器] 有过一定编程经历的工程 ...

  3. href="javascript:void(0)" 的用法

    href=”javascript:void(0);”这个的含义是,让超链接去执行一个js函数,而不是去跳转到一个地址,而void(0)表示一个空的方法,也就是不执行js函数. 为什么要使用href=” ...

  4. 参数化查询 '(@ActualShipTime datetime' 需要参数 @AuthorizationNumber,但未提供该参数。

    转自 http://www.cnblogs.com/cxd4321/archive/2012/08/09/2629716.html 在平时的C#项目开发中,当调用某个存储过程或函数的时候,我们可能经常 ...

  5. [Kubernetes]Kubernetes的网络模型

    Kubernetes的网络模型从内至外由四个部分组成: Pod内部容器所在的网络 Pod所在的网络 Pod和Service之间通信的网络 外界与Service之间通信的网络 建议在阅读本文之前先了解D ...

  6. Android应用一般上架流程

    Android App上架所需文件 上架准备  App文件: 1. 安装包 2. 应用商标:图片格式KB. 3. 应用截图(4~6张):图片格式JPG或者PNG.图片大小480*800,且每张大小一致 ...

  7. Netty服务器线程模型概览

    一切从ServerBootstrap开始 ServerBootstrap负责初始话netty服务器,并且开始监听端口的socket请求. bootstrap bootstrap =newServerB ...

  8. Spark VS Presto VS Impala

    https://www.quora.com/What-is-the-difference-between-Spark-and-Presto

  9. 【转】【WebStorm】利用WebStorm来管理你的Github

    用webstorm上传代码时,首先要先下载git,网址一搜就可以搜到,然后开始配置webstorm,打开webstorm,在file-settings中直接搜索github,然后输入自己github的 ...

  10. 缩放图片,解决bitmap 内存溢出out of memory的问题

    很多人在android开发中都遇到了生成bitmap时候内存溢出,也就是out of memory(OOM)的问题,网上对这样的问题的的解决说法不一.笔者作为一个初级开发者,在这里向大家提供一种比较实 ...