使用 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. ARM:移动GPU往PC GPU效能迈进

    行动装置的热潮持续不退,各大手机制造商除了想尽办法推出外型酷炫的行动装置设备来吸引消费者的目光之外,更在行动应用处理器玩起多核心的「核」战争,无非是希望能够带给消费者更优异的效能新体验.然而,随着消费 ...

  2. 发一些靠谱的招聘网站(含ios)

    近日整理一些 招聘网站 , 欢迎大家 推荐 http://www.zhaopin.com 智联,貌似这货上市了.. http://www.51job.com   51job  还行 大街就不提了.0. ...

  3. jmeter http协议---cookie处理

    使用jmeter测试的http接口的时候,经常遇到需要cookie做免登录等作用的情况,jmeter如何在测试http接口的时候加载所需cookie呢?主要分两步 一. 收集对应站点的cookie 1 ...

  4. 关于JAVA的参数列表传值的问题

    java传参和C++传指针不一样.它不能传入一个参数,再用这个参数去new一个新的object,再调用者看来,这没用. java中传的参数是stack上复制的值,如果传的是object,那么传的是该o ...

  5. 互斥锁pthread_mutex_init()函数

    linux下为了多线程同步,通常用到锁的概念.posix下抽象了一个锁类型的结构:ptread_mutex_t.通过对该结构的操作,来判断资源是否可以访问.顾名思义,加锁(lock)后,别人就无法打开 ...

  6. PCA,SVD

    PCA的数学原理 https://www.zhihu.com/question/34143886/answer/196294308 奇异值分解的揭秘(二):降维与奇异向量的意义 奇异值分解的揭秘(一) ...

  7. angular控制器的执行顺序和服务的注入情况

    这篇文章到底要讲什么呢? 这必须要从栗子开始讲起... 看下面这两段代码: demo1: http://jsfiddle.net/ujzmvp3j/1/ demo2: http://jsfiddle. ...

  8. ListView数据更新后,自动滚动到底部(聊天时常用)| Listview Scroll to the end of the list after updating the list

    转:http://www.cnblogs.com/bjshsqlt/p/3311830.html If you would like to after you have updated by list ...

  9. 【转】更改 shell 终端的默认键绑定为 vi 模式

    我们使用的 shell 终端是 bash,它的默认键绑定方式是 emacs 模式.比如键入 Ctrl+a 光标会停在行首,Ctrl+e 光标会停在行尾等等. 如果希望在终端输入时使用 vi 的模式,比 ...

  10. GBDT 迭代决策树

    GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决 ...