springboot打包jar(关于springboot项目的jar和war两种打包方式部署的区别)

:暂无数据 2026-08-31 00:00:01 0

springboot打包jar(关于springboot项目的jar和war两种打包方式部署的区别)

大家好,关于springboot打包jar很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于关于springboot项目的jar和war两种打包方式部署的区别的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

本文目录

关于springboot项目的jar和war两种打包方式部署的区别

通过jar运行实际上是启动了内置的tomcat,所以用的是应用的配置文件中的端口
直接部署到tomcat之后,内置的tomcat就不会启用,所以相关配置就以安装的tomcat为准,与应用的配置文件就没有关系了

解决IDEA打包SpringBoot,jar包打包不出去问题

Command line输入

执行完后,lib目录应该是这样的
-libs
-------sqljdbc4.jar
-------ownrepo
---------------sqljdbc4
----------------------1.0

回到idea右侧maven面板

执行
LifeCycle ----- clean
LifeCycle ----- install
如果发现控制台执行结果不是0的话,你应该检查控制台信息,是否有出错的情况

生成的war包可以在左侧的${YourProject} -》 target 目录下看到war包

spring boot 生成的jar包怎么使用

Spring-boot jar 包方式启动:
首先,为了防止和常用的 Tomcat 8080 端口冲突,将 Spring-boot 项目的端口号设置为 9090。
具体方法:在 application.properties 文件里写 server.port=9090。
使用 maven 命令:clean package 打包。
放到服务器上一个合适的位置。
使用 java -jar spring-boot01-1.0-SNAPSHOT.jar 命令,启动 jar 包。
***隐藏网址***
然而,上面的这种方式,只要控制台关闭,服务就不能访问了。下面我们使得 jar 包在后台运行。

SpringBoot将项目打包成jar包

1.首先在pom.xml文件中导入Springboot的maven依赖;

《!--将应用打包成一个可以执行的jar包--》

    《build》

        《plugins》

            《plugin》

                《groupId》org.springframework.boot《/groupId》

                《artifactId》spring-boot-maven-plugin《/artifactId》

            《/plugin》

        《/plugins》

    《/build》

2.package一下
3.package完成以后,target中会生成一个.jar包;
4.找到对应的jar包路径下, java -jar 打包后的名字 即可运行成功;
当然也可以在idea工具的Terminal控制台输入命令;
可以再控制台通过命令去改端口;

例如:java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8888

springboot打包发布原理

SpringBoot 提供了 Maven 插件 spring-boot-maven-plugin,将 Spring Boot 项目打成 jar 包或者 war 包。
只需要在pom.xml文件中加入下面这个插件配置,再通过mvn clean package获取jar包即可。

打包后 通过下面的命令即可启动一个服务。

可以看到,主要有三个大目录META-INF,BOOT-INF以及org,

比较重要的是MAINIFEST.MF文件:

该文件声明了Main-Class 配置项:可以理解为jar包的启动类,这里设置为 spring-boot-loader 项目的 JarLauncher类,进行 Spring Boot 应用的启动。
还有一个Start-Class 配置项:配置的内容是我们springboot项目的主启动类。

classes文件中保存了 Java 类所编译的 .class文件以及配置文件等。
lib目录中保存了我们项目所依赖的jar包。

该文件中即springboot为我们提供的jar包启动类,亦即JarLauncher.class

当使用 java -jar filename.jar 命令启动时,会执行封装在 JAR 文件中的程序。JAR 文件需包含 manifest,其中一行格式为 Main-Class:classname,指定了一个包含 public static void main(String args) 方法的类,作为该程序的启动点。

对应在示例的这个项目,问题可以翻译为为什么不可以直接使用com.jsvc.jarlearn.JarlearnApplication类作为启动类?

主要是因为,Java 没有提供任何加载嵌套 jar 文件的标准方法(即加载本身包含在 jar 中的 jar 文件)。当需要分发一个可以从命令行运行而不需要解压缩的自包含应用程序时 , 会出现问题。

同时,我试了下,直接运行application类的话,是找不到主类的:

因为在文件目录中,JarlearnApplication实际上是在META-INF/maven/... 中的,所以会找不到。

所以,springboot以 org.springframework.boot.loader.JarLauncher 为启动类,
又自定义了 LaunchedURLClassLoader 用来加载BOOT-INF中的class文件以及BOOT-INF/lib中的嵌套jar包。

我这边通过引入 spring-boot-loader 模块来看下JarLaunch的源码:

可以看到main方法中,执行了launch方法,改方法由JarLaunch的父类Launcher提供:

launch方法主要分为三步:

基本思路就是将 org.springframework.boot.loader 包路径添加到 java.protocol.handler.pkgs 环境变量中,从而使用自定义的 URLStreamHandler 实现类 Handler处理 jar: 协议的 URL。
关于handler 可以自行百度下。

这里有两个主要方法:

也就是 getClassPathArchivesIterator 以及 createClassLoader
首先是 getClassPathArchivesIterator :

首先是isSearchCandidate,在JarLaunch中实现:

可以看出是只处理BOOT-INF/文件夹下的内容。
然后会通过 getNestedArchives 获取到嵌套的Archive,其中的 isNestedArchive 方法也由JarLaunch实现:

基本就是获取 BOOT-INF/classes/ 下的目录以及 BOOT-INF/lib/ 下的jar文件,最终通过 getNestedArchives 将其封装为对应的Archive并返回。

然后就是 createClassLoader 方法:

基本上就是通过archives获取到所有的URL,然后创建处理这些URL的ClassLoader。

主要就是通过 getMainClass 方法获取到manifest文件中配置的 Start-Class :

然后通过另一个launch方法,开始执行:

这里createMainMethodRunner创建出来的是什么呢?

最终调用的其实就是MainMethodRunner的run方法了,其实也就是通过反射调用Application的main方法了。

springboot项目打包成war用tomcat运行好还是打包成jar直接启动好为何

在IT软件界,Java一直占据着大半壁江山,Java的生态圈环境很好,有着很多优秀的框架,而 Spring Boot 作为Spring框架中的代表,这几年也越来越火。

Spring Boot是用来简化Spring应用的配置和开发过程的,此框架采用了“约定优于配置”的理念, 免去了繁琐的XML配置 ,使我们开发项目更简单。而且Spring Boot提供了两种项目打包方式:生成war文件、生成可执行的jar文件,很多Java开发者不清楚这两种项目打包方式的区别,生产环境该选哪种方式呢?
1、war包方式部署
war包其实是打包后的Java Web工程, 本质上是个压缩包 ,里面包含了很多目录及文件,我们把war包放入Tomcat这类容器中启动后,war包就会自动解压出一个同名的文件夹来。

注意:Spring Boot项目如果要打包成war包来部署,是需要修改项目入口文件代码的。另外由于Spring Boot内置了Tomcat容器,所以打包成war包时要将内置的Tomcat依懒排除掉。
2、可执行jar文件方式部署

Spring Boot框架默认的打包部署方式是生成一个可执行的jar文件,无论项目多么复杂,依懒包有多少,最终只有一个jar文件(有些可能有外置的配置文件),在任何一台装有JRE/JDK环境的服务器上可以直接以 java -jar xx.jar 这种方式来运行(其实是靠内置的Tomcat来运行的),十分方便。
可执行jar文件方式部署是我们推荐的 ,特别是在微服务场景下部署更便捷。

无论是war方式还是jar方式,本质上差别并不大。在生产环境下还是要选择合适的方式。

综上,如果服务器配置高、节点多、微服务方式,建议选择jar方式部署;如果服务器配置跟不上,建议选择war方式部署(省内存空间)。

如果你还想了解更多这方面的信息,记得收藏关注本站。

springboot打包jar(关于springboot项目的jar和war两种打包方式部署的区别)

本文编辑:admin

更多文章:


androidapp源码免费下载(如何实现APK的反编译得到APK的源码)

androidapp源码免费下载(如何实现APK的反编译得到APK的源码)

本篇文章给大家谈谈androidapp源码免费下载,以及如何实现APK的反编译得到APK的源码对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年9月22日 18:00

security的反义词(risk的反义词)

security的反义词(risk的反义词)

大家好,今天小编来为大家解答以下的问题,关于security的反义词,risk的反义词这个很多人还不知道,现在让我们一起来看看吧!

2026年9月22日 15:40

二郎神杨戬简笔画(二郎神怎么画)

二郎神杨戬简笔画(二郎神怎么画)

本篇文章给大家谈谈二郎神杨戬简笔画,以及二郎神怎么画对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年9月22日 10:50

service pack 3(操作系统版本升级(SP) Service Pack 3当中的“Service Pack 3”是什么意思)

service pack 3(操作系统版本升级(SP) Service Pack 3当中的“Service Pack 3”是什么意思)

大家好,关于service pack 3很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于操作系统版本升级(SP) Service Pack 3当中的“Service Pack 3”是什么意思的知识点,相信应该可以解决大家的一

2026年9月22日 10:20

html代码怎么写大佬教程(html网页的题来个大佬,写代码,题目在图上)

html代码怎么写大佬教程(html网页的题来个大佬,写代码,题目在图上)

本篇文章给大家谈谈html代码怎么写大佬教程,以及html网页的题来个大佬,写代码,题目在图上对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年9月22日 10:10

结构体内又一个struct(c++ 在结构体中再嵌入一个结构体如何调用)

结构体内又一个struct(c++ 在结构体中再嵌入一个结构体如何调用)

本篇文章给大家谈谈结构体内又一个struct,以及c++ 在结构体中再嵌入一个结构体如何调用对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年9月22日 09:40

next是什么意思英语(next是什么单词)

next是什么意思英语(next是什么单词)

本篇文章给大家谈谈next是什么意思英语,以及next是什么单词对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年9月22日 07:50

美国参议院人数(美国每个州的议员人数取决于什么)

美国参议院人数(美国每个州的议员人数取决于什么)

大家好,今天小编来为大家解答以下的问题,关于美国参议院人数,美国每个州的议员人数取决于什么这个很多人还不知道,现在让我们一起来看看吧!

2026年9月22日 05:20

高中信息技术python(高考信息技术用的是什么语言)

高中信息技术python(高考信息技术用的是什么语言)

今天给各位分享高考信息技术用的是什么语言的知识,其中也会对高考信息技术用的是什么语言进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年9月22日 02:50

cocos creator中文(cocoscreator和cocoscreator3d的区别)

cocos creator中文(cocoscreator和cocoscreator3d的区别)

各位老铁们好,相信很多人对cocos creator中文都不是特别的了解,因此呢,今天就来为大家分享下关于cocos creator中文以及cocoscreator和cocoscreator3d的区别的问题知识,还望可以帮助大家,解决大家的

2026年9月22日 02:30

最近更新

洛宁网附近有什么好玩的?
2026-09-22 19:45:27 浏览:0
如何为初创企业创建低成本网站
2026-09-22 19:44:56 浏览:0
热门文章

wait for you杨和苏(大家听下(wait for you)这首英文歌的开头那段音乐)
2026-06-13 16:20:04 浏览:22
刷关键字排名怎么操作最有效?
2026-09-14 20:02:13 浏览:14
oppo a9拆机教程(oppoa9拆机教程)
2026-06-13 10:40:02 浏览:12
标签列表