Springboot项目打包,springboot应用打包部署
00-1010程序打包程序运行SpringBoot程序打包失败处理命令行启动常见问题和解决方案。SpringBoot项目启动快(Linux版)。刚开始做开发和研究的小伙伴,可能会有一个错误的认识。我们每天在Idea下写程序,在Idea下运行。
但是实际开发之后,我们的项目是不可能在自己的电脑上运行的。
我们将来制作的程序将在专用服务器上运行。简单地说,我们会把你的程序放在一台独立的计算机上。这台电脑比你开发使用的那台更专业,各方面的安全等级都远高于你现在的电脑。
那我们的程序怎么放在这个专用电脑上呢?有必要先把我们的程序组织成一个文件,然后把这个文件转移到这个服务器上。有两个过程,一个是打包过程,一个是运行过程。
温馨提示
为了保证环境适应性,企业将采用以下流程在网上发布项目,此流程不在此讨论。
开发部门使用Git、SVN等版本控制工具将项目上传到版本服务器server,使用版本控制工具下载项目服务器,在当前真机环境下使用Maven tools重建项目启动服务。继续说我们的包装和运行流程。打包是指把程序转换成可执行文件,运行是指不依赖开发环境,打包产生的文件。以上两种操作都有相应的命令,可以快速执行。
00-1010 Spring Boot程序是基于Maven创建的,Maven中有打包的指令,叫做package。该操作可以在Idea环境中执行。
MVPackage打包后会产生一个类似于项目名的jar文件,其名称由模块名版本号组成。罐子。
00-1010包完成后,可以直接执行。在包所在的路径下,执行指令。
在java -jar项目包名之后。jar执行程序打包指令,程序正常运行,这和在Idea下执行程序没什么区别。
特别关注:如果你的计算机中没有安装java的jdk环境,你就不能正确地执行上述操作,因为程序使用java指令。
特别关注:当使用向导创建SpringBoot项目时,在pom.xml文件中会有如下配置。这一段配置一定不能删除,否则程序打包后无法正常执行。
构建插件插件groupIdorg.springframework.boot/groupId artifactId spring-boot-maven-plugin/artifactId/plugin/plugins/build总结
SpringBoot项目可以在java环境下独立运行基于jar文件的服务。SpringBoot项目执行mvn命令包打包执行jar命令:java -jar项目名. jar。
00-1010有些小伙伴在打包执行后会出现一些问题,导致程序无法正常执行,比如下面这种现象
要理解这个问题,就要说说的工作机制。jar文件。了解这个东西,有助于我们知道如何避免这类问题。
Java开发通常会涉及到很多jar包,比如mysql的驱动jar包,我们把上面的程序打包后得到的jar文件也是一个JAR文件。这时候如果用上面的java -jar指令执行mysql的驱动jar包,就会出现上面提到的不可执行现象,但是为什么我们的SpringBoot项目可以执行呢?其实是因为包装方式的不同。
SpringBoot项目的pom.xml中有以下配置,决定了打包后的包是否可以执行。
构建插件插件groupIdorg.springframework.boot/groupId
<artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins></build>我们分别开启这段配置和注释掉这段配置分别执行两次打包,然后观察两次打包后的程序包的差别,共有3处比较明显的特征
打包后文件的大小不同打包后所包含的内容不同打包程序中个别文件内容不同 先看第一个现象,文件大小不同。带有配置时打包生成的程序包大小如下:
不难看出,带有配置的程序包体积比不带配置的大了30倍,那这里面都有什么呢?能差这么多?下面看看里面的内容有什么区别。
我们发现内容也完全不一样,仅有一个目录是一样的,叫做META-INF。打开容量大的程序包中的BOOT-INF目录下的classes目录,我们发现其中的内容居然和容量小的程序包中的内容完全一样。
原来大的程序包中除了包含小的程序包中的内容,还有别的东西。都有什么呢?回到BOOT-INF目录下,打开lib目录,里面显示了很多个jar文件。
仔细翻阅不难发现,这些jar文件都是我们制作这个工程时导入的坐标对应的文件。大概可以想明白了,SpringBoot程序为了让自己打包生成的程序可以独立运行,不仅将项目中自己开发的内容进行了打包,还把当前工程运行需要使用的jar包全部打包进来了。为什么这样做呢?就是为了可以独立运行。不依赖程序包外部的任何资源可以独立运行当前程序。这也是为什么大的程序包容量是小的程序包容量的30倍的主要原因。
再看看大程序包还有什么不同之处,在最外层目录包含一个org目录,进入此目录,目录名是orgspringframeworkbootloader,在里面可以找到一个JarLauncher.class的文件,先记得这个文件。再看这套目录名,明显是一个Spring的目录名,为什么要把Spring框架的东西打包到这个程序包中呢?
回到两个程序包的最外层目录,查看名称相同的文件夹META-INF下都有一个叫做MANIFEST.MF的文件,但是大小不同,打开文件,比较内容区别
小容量文件的MANIFEST.MF
Manifest-Version: 1.0Implementation-Title: springboot_08_ssmpImplementation-Version: 0.0.1-SNAPSHOTBuild-Jdk-Spec: 1.8Created-By: Maven Jar Plugin 3.2.0
大容量文件的MANIFEST.MF
Manifest-Version: 1.0Spring-Boot-Classpath-Index: BOOT-INF/classpath.idxImplementation-Title: springboot_08_ssmpImplementation-Version: 0.0.1-SNAPSHOTSpring-Boot-Layers-Index: BOOT-INF/layers.idxStart-Class: com.itheima.SSMPApplicationSpring-Boot-Classes: BOOT-INF/classes/Spring-Boot-Lib: BOOT-INF/lib/Build-Jdk-Spec: 1.8Spring-Boot-Version: 2.5.4Created-By: Maven Jar Plugin 3.2.0Main-Class: org.springframework.boot.loader.JarLauncher
大文件中明显比小文件中多了几行信息,其中最后一行信息是Main-Class: org.springframework.boot.loader.JarLauncher。这句话什么意思呢?如果使用java -jar执行此程序包,将执行Main-Class属性配置的类,这个类恰巧就是前面看到的那个文件。原来SpringBoot打包程序中出现Spring框架的东西是为这里服务的。而这个org.springframework.boot.loader.JarLauncher类内部要查找Start-Class属性中配置的类,并执行对应的类。这个属性在当前配置中也存在,对应的就是我们的引导类类名。
现在这组设定的作用就明白了:
SpringBoot程序添加配置后会打出一个特殊的包,包含Spring框架部分功能,原始工程内容,原始工程依赖的jar包首先读取MANIFEST.MF文件中的Main-Class属性,用来标记执行java -jar命令后运行的类JarLauncher类执行时会找到Start-Class属性,也就是启动类类名运行启动类时会运行当前工程的内容运行当前工程时会使用依赖的jar包,从lib目录中查找看来SpringBoot打出来了包为了能够独立运行,简直是煞费苦心,将所有需要使用的资源全部都添加到了这个包里。这就是为什么这个jar包能独立运行的原因。
再来看之前的报错信息:
由于打包时没有使用那段配置,结果打包后形成了一个普通的jar包,在MANIFEST.MF文件中也就没有了Main-Class对应的属性了,所以运行时提示找不到主清单属性,这就是报错的原因。
总结
spring-boot-maven-plugin插件用于将当前程序打包成一个可以独立运行的程序包
命令行启动常见问题及解决方案
各位小伙伴在DOS环境下启动SpringBoot工程时,可能会遇到端口占用的问题。给大家一组命令,不用深入学习,备用吧。
# 查询端口netstat -ano# 查询指定端口netstat -ano findstr "端口号"# 根据进程PID查询进程名称tasklist findstr "进程PID号"# 根据PID杀死任务taskkill /F /PID "进程PID号"# 根据进程名称杀死任务taskkill -f -t -im "进程名称"
SpringBoot项目快速启动(Linux版)
其实对于Linux系统下的程序运行与Windows系统下的程序运行差别不大,命令还是那组命令,只不过各位小伙伴可能对Linux指令不太熟悉,结果就会导致各种各样的问题发生。比如防火墙如何关闭,IP地址如何查询,JDK如何安装等等。
到此这篇关于SpringBoot程序的打包与运行的实现的文章就介绍到这了,更多相关SpringBoot程序打包与运行内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。