Spring Boot 多种生产打包方式详解

B站影视 2025-01-15 08:47 3

摘要:生产上发布 Spring Boot 项目时,流程颇为繁琐且低效。但凡代码有一丁点改动,就得把整个项目重新打包部署,耗时费力不说,生成的 JAR 包还特别臃肿,体积庞大。每次更新项目,光是上传这大文件就得花费不少时间,严重影响工作节奏。

生产上发布 Spring Boot 项目时,流程颇为繁琐且低效。但凡代码有一丁点改动,就得把整个项目重新打包部署,耗时费力不说,生成的 JAR 包还特别臃肿,体积庞大。每次更新项目,光是上传这大文件就得花费不少时间,严重影响工作节奏。

为解决这一痛点,我打算把依赖库以及配置文件(lib 文件夹下的那些 jar 包,还有config下的applacation.yml等文件)从项目主体里剥离出来,后续部署时,只需发布核心代码就行,这样既能加快部署速度,又能减轻文件传输负担,让项目更新变得轻松便捷

利用springboot中resource插件来排除配置,并统一打包到config目录下

src/main/resources true ${project.build.directory}/config **/*.properties **/*.yml **/*.xml mapper/*.xml

org.springframework.boot spring-boot-maven-plugin XXXXX.TwinWebApplication--> -Dfile.encoding=UTF-8 zip no-exists-jar non-exists-jar repackage

org.apache.maven.plugins maven-dependency-plugin copy-dependencies

package

copy-dependencies ${project.build.directory}/lib false false runtime

打包后目录结构,如下图所示

执行命令 java -jar -Dloader.path=./lib -jar xxx.jar

注意 springboot启动时候会优先读取config目录下配置文件 所以这里不用指定-Dspring.config.location=XX.yml文件

注意 例如日志文件配置以及mybits等配置文件 可以配成绝对路径 如下所示:

方法二 使用maven-jar-plugin插件实现1. 使用插件maven-resources-plugin处理配置文件打包到config目录

org.apache.maven.plugins maven-resources-plugin UTF-8 copy-dependencies

package

copy-resources ${project.build.directory}/twin-web/config src/main/resources

2. 使用maven-jar-plugin 打包可执行jar 并排除依赖

org.apache.maven.plugins maven-jar-plugin ${project.build.directory}/twin-web/ false true ./libs/ com.keqing.twinweb.TwinWebApplication ./config/ *.yml mapper/** *.xml

3. 使用maven-dependency-plugin 打包libs目录下

org.apache.maven.plugins maven-dependency-plugin copy-dependencies

package

copy-dependencies ${project.build.directory}/twin-web/libs false false runtime

使用package打包后的目录

查看自己打包后jar目录,注意这种打包方式弊端,按照一定约定格式规范固定了,一旦依赖jar包(包括配置文件目录等)发生变化就必须重新打包

启动程序java -jar xxx.jar

maven-assembly-plugin 是 Maven 中的一个插件,它允许用户将项目的输出以及依赖、模块、站点文档和其他文件打包成一个可发布的格式,例如 zip、tar.gz、jar 等。以下是使用 maven-assembly-plugin 的一些优势:

自定义打包格式: maven-assembly-plugin 允许你通过定义描述符文件(descriptor)来完全自定义打包的内容和格式。你可以选择包含或排除特定的文件和目录。一键打包: 通过一个简单的 Maven 命令,你可以创建一个包含所有必需依赖的单一归档文件,这使得分发和部署变得非常简单。多环境支持: 可以为不同的环境(开发、测试、生产)创建不同的打包配置,使得环境迁移更加容易。依赖管理: 插件会自动处理项目依赖,将它们打包到最终的归档文件中,无需手动管理。模块化项目支持: 对于多模块项目,maven-assembly-plugin 可以将所有模块的输出合并到一个归档文件中。预配置的描述符: 插件提供了一些预定义的描述符,如 bin、jar-with-dependencies 等,可以直接使用,无需自定义。灵活性: 你可以通过修改描述符文件来调整打包行为,以适应不同的需求。集成性: maven-assembly-plugin 与 Maven 生态系统紧密集成,可以与其他 Maven 插件协同工作。文档和社区支持: 由于 maven-assembly-plugin 是 Maven 的一部分,因此有广泛的文档和社区支持。 src/main/resources true **/*.properties **/*.yml **/*.xml mapper/*.xml

org.springframework.boot spring-boot-maven-plugin XXXXX.TwinWebApplication--> -Dfile.encoding=UTF-8 ZIP no-exists-jar non-exists-jar repackage

3. 引入springboot里约定maven-assembly-plugin

maven-assembly-plugin false assembly.xml make-assembly

package

single

配置assembly.xml文件

make-assembly tar.gz zip true 即用户具有读/写/执行权限,组用户和其它用户具有读写权限;--> 即用户具有读写权限,组用户和其它用户具有只读权限;--> unix ${basedir}/bin ${file.separator} 0755 **.sh **.bat ${basedir}/src/main/resources config 0644 *.properties *.yml *.xml mapper/*.xml ${project.build.directory} ${file.separator} *.jar false true lib provided false true lib system false true lib runtime

打包后目录

解压zip目录查看

使用命令启动项目java -jar -Dloader.path=./lib -jar xxx.jar

来源:散文随风想

相关推荐