0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SpringBoot部署打包成jar和war有什么不同呢?

Android编程精选 来源:CSDN 2023-04-07 11:30 次阅读

首先给大家来讲一个我们遇到的一个奇怪的问题:

我的一个springboot项目,用mvn install打包成jar,换一台有jdk的机器就直接可以用java -jar 项目名.jar的方式运行,没任何问题,为什么这里不需要tomcat也可以运行了?

然后我打包成war放进tomcat运行,发现端口号变成tomcat默认的8080(我在server.port中设置端口8090)项目名称也必须加上了。

也就是说我在原来的机器的IDEA中运行,项目接口地址为 ip:8090/listall,打包放进另一台机器的tomcat就变成了ip:8080/项目名/listall。这又是为什么呢?

通过jar运行实际上是启动了内置的tomcat,所以用的是应用的配置文件中的端口

直接部署到tomcat之后,内置的tomcat就不会启用,所以相关配置就以安装的tomcat为准,与应用的配置文件就没有关系了

哎,现在学编程的基本都不会教历史了,也没人有兴趣去钻研。

总体来说吧,很多年前,Sun 还在世的那个年代,在度过了早期用 C++写 Html 解析器的蛮荒时期后,有一批最早的脚本程序进入了 cgi 时代,此时的 Sun 决定进军这个领域,为了以示区别并显得自己高大上,于是研发了 servlet 标准,搞出了最早的 jsp。并给自己起了个高大上的称号 JavaEE ( Java 企业级应用标准,其实不就是一堆服务器以 http 提供服务吗,吹逼)。

既然是企业级标准那自然得有自己的服务器标准。于是 Servlet 标准诞生,以此标准实现的服务器称为 Servle 容器服务器,Tomcat 就是其中代表,被 Sun 捐献给了 Apache 基金会,那个时候的 Web 服务器还是个高大上的概念,当时的 Java Web 程序的标准就是 War 包(其实就是个 Zip 包),这就是 War 包的由来。

后来随着服务器领域的屡次进化,人们发现我们为什么要这么笨重的 Web 服务器,还要实现一大堆 Servlet 之外的管理功能,简化一下抽出核心概念 servlet 不是更好吗,最早这么干的似乎是 Jetty,出现了可以内嵌的 Servelet 服务器。

去掉了一大堆非核心功能。后来 tomcat 也跟进了,再后来,本来很笨重的传统 JavaEE 服务器 Jboss 也搞了个 undertow 来凑热闹。正好这个时候微服务的概念兴起,“ use Jar,not War ”。要求淘汰传统 Servlet 服务器的呼声就起来了。

jar包和war包的区别

1、war是一个web模块,其中需要包括WEB-INF,是可以直接运行的WEB模块;jar一般只是包括一些class文件,在声明了Main_class之后是可以用java命令运行的。

2、war包是做好一个web应用后,通常是网站,打成包部署到容器中;jar包通常是开发时要引用通用类,打成包便于存放管理。

3、war是Sun提出的一种Web应用程序格式,也是许多文件的一个压缩包。这个包中的文件按一定目录结构来组织;classes目录下则包含编译好的Servlet类和Jsp或Servlet所依赖的其它类(如JavaBean)可以打包成jar放到WEB-INF下的lib目录下。

JAR文件格式以流行的ZIP文件格式为基础。与ZIP文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。

【格式特点】:

安全性可以对 JAR 文件内容加上数字化签名。这样,能够识别签名的工具就可以有选择地为您授予软件安全特权,这是其他文件做不到的,它还可以检测代码是否被篡改过。

减少下载时间如果一个 applet 捆绑到一个 JAR 文件中,那么浏览器就可以在一个 HTTP 事务中下载这个 applet 的类文件和相关的资源,而不是对每一个文件打开一个新连接。

压缩JAR 格式允许您压缩文件以提高存储效率。

传输平台扩展Java 扩展框架(Java Extensions Framework)提供了向 Java 核心平台添加功能的方法,这些扩展是用 JAR 文件打包的(Java 3D 和 JavaMail 就是由 Sun 开发的扩展例子)。

WAR文件就是一个Web应用程序,建立WAR文件,就是把整个Web应用程序(不包括Web应用程序层次结构的根目录)压缩起来,指定一个war扩展名。

【建立的条件】:

需要建立正确的Web应用程序的目录层次结构。

建立WEB-INF子目录,并在该目录下建立classes与lib两个子目录。

将Servlet类文件放到WEB-INFclasses目录下,将Web应用程序所使用Java类库文件(即JAR文件)放到WEB-INFlib目录下。

将JSP页面或静态HTML页面放到上下文根路径下或其子目录下。

建立META-INF目录,并在该目录下建立context.xml文件。

下面给大家讲讲怎么将springboot项目打包成jar和war

SpringBoot项目打包成jar很简单,也是SpringBoot的常用打包格式;本篇博客将SpringBoot打包成jar和war两种方式都记录下来;

先介绍将SpringBoot打包成jar包的方式:(以下示例是在idea中演示)

一、打包成jar

1)先new 一个Spring Starter Project

efdd9226-d4a6-11ed-bfe3-dac502259ad0.png

这里注意packaging默认为jar,不用修改.

2)创建完成后项目的pom如下:



4.0.0

org.springframework.boot
spring-boot-starter-parent
2.1.4.RELEASE
 

com.example
demo
0.0.1-SNAPSHOT
demo
DemoprojectforSpringBoot


1.8




org.springframework.boot
spring-boot-starter



org.springframework.boot
spring-boot-starter-test
test






org.springframework.boot
spring-boot-maven-plugin





3)打成jar包(通过maven命令的方式):

在Terminal窗口,使用mvn clean package命令打包:

eff269f8-d4a6-11ed-bfe3-dac502259ad0.png

然后在target目录下就能看到打包好的jar包了

f03f3d5a-d4a6-11ed-bfe3-dac502259ad0.png

二、打包成war包形式

1)可以在刚才创建的项目上做改动,首先打包成war需要一个ServletInitializer类,这个类的位置需要和启动类在同一个文件下

f0571aba-d4a6-11ed-bfe3-dac502259ad0.png

如果一开始选择war包形式,会自动创建此类

2)修改pom.xml

修改pom.xml的war将原先的jar改为war;

3)如果我们的SpringBoot是使用html作为前端页面开发没有问题,但是如果我们想用jsp开发,这个时候就需要配置一些依赖了:主要是排除SpringBoot的内置Tomcat,添加javax.servlet-api和tomcat-servlet-api(SpringMVC还需要配置后缀);

最后的pom.xml如下:



4.0.0

org.springframework.boot
spring-boot-starter-parent
2.1.4.RELEASE
 

com.example
demo
0.0.1-SNAPSHOT
war
demo
DemoprojectforSpringBoot


1.8




org.springframework.boot
spring-boot-starter-thymeleaf


org.springframework.boot
spring-boot-starter-tomcat




javax.servlet
javax.servlet-api
provided



org.apache.tomcat
tomcat-servlet-api
8.0.36
provided



org.springframework.boot
spring-boot-starter-web



org.springframework.boot
spring-boot-starter-tomcat
provided



org.springframework.boot
spring-boot-starter-test
test






org.springframework.boot
spring-boot-maven-plugin





因为SpringBoot默认推荐的是html,而不是jsp;经过上面的修改就可以使用jsp进行开发了;

4)打包成war:使用mvn clean package

如下:

f07225bc-d4a6-11ed-bfe3-dac502259ad0.png

打包成功后,就可以将war包放在tomcat下的webapps下,然后运行tomcat,启动项目了;

记录下来,以后用到的时候看 ^_^;

当然了,在创建项目的时候直接选择package为war,直接就能打成war包了

当选择war为打包方式创建项目时,ServletInitializer是默认直接创建的

f08bd2b4-d4a6-11ed-bfe3-dac502259ad0.png

此时,pom文件如下



4.0.0

org.springframework.boot
spring-boot-starter-parent
2.1.4.RELEASE
 

com.example
demo
0.0.1-SNAPSHOT
war
demo
DemoprojectforSpringBoot


1.8




org.springframework.boot
spring-boot-starter-web



org.springframework.boot
spring-boot-starter-tomcat
provided


org.springframework.boot
spring-boot-starter-test
test






org.springframework.boot
spring-boot-maven-plugin





直接mvn clean package就能打包成功

f0b39e34-d4a6-11ed-bfe3-dac502259ad0.png






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2914

    浏览量

    103320
  • Web服务器
    +关注

    关注

    0

    文章

    137

    浏览量

    24256
  • JSP技术
    +关注

    关注

    0

    文章

    3

    浏览量

    1566
  • SpringBoot
    +关注

    关注

    0

    文章

    172

    浏览量

    126

原文标题:SpringBoot 部署打包成 jar 和 war 有什么不同?

文章出处:【微信号:AndroidPush,微信公众号:Android编程精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    SpringBoot 如何实现热部署

    部署是软件开发中一个非常有用的功能,它允许我们在不重新启动整个应用的情况下,依旧能够使我们修改的代码生效。 现在Java Web 开发应该都是使用的 SpringBoot,那么本篇文章就来介绍
    的头像 发表于 09-30 10:16 530次阅读
    <b class='flag-5'>SpringBoot</b> 如何实现热<b class='flag-5'>部署</b>

    labview打包成安装程序

    怎样 将labview打包成安装程序,本文很好的做了介绍
    发表于 06-18 19:15

    打包成EXE后不能串口通信

    本帖最后由 960441337 于 2013-12-4 08:13 编辑 我将本来可以实现串口通信的程序打包成EXE文件后,还在本机上执行,就不能实现串口通信了。就算故意弄错COM口也不会报错。求大神帮忙。原程序是没有错的,应该是打包的时候少了什么东西。求助,谢谢大
    发表于 12-04 08:11

    关于JAVA不能打包成jar包的问题

    前几天在对JAVA文件打包成jar包时,遇到一些问题,至今未能解决,记录下来,还望大家指教。   在将多个CLASS文件打包成jar包时,比如我要把放在/mysoft/bin目录下的类
    发表于 12-09 11:57

    请问如何打jar包和运行jar包?

    08:48:25) 分类:想知道... jar文件听说过吗,没有?或者陌生!好,没关系,这就是我们的第一站:打包发布。 为什么会有这个玩意,首先,这是jar的全称:JavaTM A
    发表于 07-05 01:08

    Linux部署maven(war包)web 项目

    一、说明Linux配置Java环境及安装Tomcat,请参考博文点击打开链接Linux部署maven步骤分为以下几点:1.Eclipse导出war包2.拷贝war包到Linux3.Linux下解压
    发表于 07-04 06:40

    基于Linux的Maven的自动化打包发布项目

    参数分别为: svn的路径,打包的名称,打包的方式jar或者war,服务器地址,服务器的路径,以空格分隔。
    发表于 07-08 06:38

    基于spring boot的linux服务器部署方法

    最近一直在研究springboot服务器,之前受到springmvc等框架的困扰,思路不对,一直想把springboot打包成war包然后部署
    发表于 07-22 06:51

    springboot-vue后台管理项目如何快速打包

    springboot-vue后台管理项目快速打包
    发表于 05-18 15:12

    怎样去使用springboot

    怎样去使用springboot?学习springboot需要懂得哪些?
    发表于 10-25 07:13

    如何将LUbuntu系统的根文件系统打包成img

    如何将LUbuntu系统的根文件系统打包成img?其整体操作哪些流程?
    发表于 03-03 06:16

    怎样通过QEMU模拟器加载系统文件打包成新的roofts镜像

    怎样通过QEMU模拟器加载系统文件打包成新的roofts镜像哪些步骤?
    发表于 03-04 07:23

    jarwar之间不得不说的事

    ava编译好之后生成class文件,但如果直接发布这些class文件的话会很不方便,所以就把许多的class文件打包成一个jarjar中除了class文件还可以包括一些资源和配置文件,通常一个
    的头像 发表于 12-12 15:32 5046次阅读
    <b class='flag-5'>jar</b>与<b class='flag-5'>war</b>之间不得不说的事

    Spring Boot配置加载相关知识

    Spring BOOT 启动参数 在Java Web的开发完成后,以前我们都会打包成war文件,然后放大web容器,比如tomcat、jetty这样的容器。现在基于SpringBoot开发的项目
    的头像 发表于 10-07 15:47 307次阅读

    创建jar文件的过程

    在这篇文章中,我们将介绍一下以编程方式创建jar文件的过程。在编写软件时,最终我们需要将其部署到生产状态。在某些情况下,使用带有独立文件的classpath是可以的。通常情况下,处理一个文件会更方便
    的头像 发表于 10-08 15:36 574次阅读