在实际生产过程中,常常会遇到资源打包文件太大,在部署的时候很不方便,传统的打包方式会将所有的文件(jar 和 资源配置文件)都打包在了一个 jar 文件中,这样后期在修改配置信息的时候,相当的不方便。
因此,如何将项目本身的 jar 文件和依赖 jar 文件分离,并把资源文件也分离出来,分别独立成自己的文件目录是很有必要的。
一、传统打包方式
传统的打包方式在 pom.xml 中只需要在 build 插件中配置spring-boot-maven-plugin
即可:
1 | <plugin> |
打包出来的 jar 包是下面这样的,项目生成了target
文件目录,里面打包好了一个完整的 jar 文件,直接使用:java -jar king-0.0.1-SNAPSHOT.jar
就能运行了。
将 jar 包解压开,会得到下面的目录结构:
注意在META-INF
文件目录中存在MANIFEST.MF
文件,里面记录了启动类Start-Class
、依赖类Spring-Boot-Lib
等信息。
运行 jar 包的时候,首先启动的是启动类,并依赖BOOT-INF/lib/
文件目录中的 jar 文件。
二、springboot 打包 lib 和资源文件分离
现在有如下的打包需求:
项目自身 jar 文件打包在 zip 包根目录下,其他所有依赖包打包在lib
文件夹下,资源文件全部打包在resources
文件目录下,项目运行的脚本文件打包在bin
文件目录下。
在pom.xml
配置:
1 | <build> |
注意:在spring-boot-maven-plugin
中配置了包含本地jar依赖的配置<includeSystemScope>true</includeSystemScope>
在项目根目录下存在放置assembly.xml
配置:
1 | <assembly |
在bin
脚本文件目录中放置脚本文件和配置文件:
配置文件用于指定 jar 的名称及版本信息
1 | ARTIFACTID=king |
windows 脚本start.bat
文件:
1 | ECHO off |
脚本解释:最为关键的就是运行jar 文件的时候携带-Dloader.path=.,resources,lib
linux 脚本startup.sh
文件:
1 | !/bin/sh |
shell 脚本里需要配置JAVA_HOME
路径和 jar 文件名即可。