配置springboot项目动静分离打包分离lib方式
作者:wow_xh
本文介绍了如何将Spring Boot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建config目录,并在pom文件中进行相应配置,可以实现配置文件的外部化,打包后的jar包和lib文件夹中分别存放了第三方jar包和静态资源文件
前言
默认情况下,我们打包springboot工程时,会将依赖包、配置文件、静态资源和模板一起打包到jar中,这样会导致jar很大并且不容易对配置文件做出修改。

其实,经过简单的配置就可以实现静态资源的分离,做到修改文件不需要重新打包,做到业务不停,不影响已经运行的项目。
1、分离配置文件原理
springboot启动时,会优先使用同级config目录下的配置,如果没有再到包里面搜索。
这是因为 springboot 读取配置有一个优先级,放在jar包外面 config 目录优先级最高,主要是便于从外部修改配置,而不是改 jar 包中的 application.properties文件。优先级如下:
- 当前目录的 config 目录下
- 当前目录
- classpath 的 config 目录下
- classpath 的根目录
当application.properties和application.yml同时存在时,application.properties的优先级高于application.yml
因此,分离分配文件,只需要在jar包同级目录创建一个config目录,然后将application.properties文件放在里面就行了。
2、pom文件配置
在build标签下的plugins标签里增加以下代码
<plugins>
<!--定义项目的编译环境-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- 打JAR包 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<!-- 不打包资源文件(配置文件和依赖包分开) -->
<excludes>
<exclude>*.yml</exclude>
<exclude>*.properties</exclude>
<exclude>mybatis/**</exclude>
<exclude>static/**</exclude>
</excludes>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<!-- MANIFEST.MF 中 Class-Path 加入前缀 -->
<classpathPrefix>lib/</classpathPrefix>
<!-- jar包不包含唯一版本标识 -->
<useUniqueVersions>false</useUniqueVersions>
<!--指定入口类 -->
<mainClass>xxxx(你的application启动文件所在位置)</mainClass>
<!-- 例如<mainClass>com.ruoyi.RuoYiApplication</mainClass>-->
</manifest>
<manifestEntries>
<!--MANIFEST.MF 中 Class-Path 加入资源文件目录 -->
<Class-Path>./config/</Class-Path>
</manifestEntries>
</archive>
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
</plugin>
<!-- 复制项目用到的依赖jar包到lib文件夹里 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<!-- 复制指定的文件到config文件夹里 -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution> <!-- 复制配置文件 -->
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>*.yml</include>
<include>*.properties</include>
<include>mybatis/**</include>
<include>static/**</include>
</includes>
</resource>
</resources>
<outputDirectory>${project.build.directory}/config</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>注意修改mainClass标签中的启动类文件
3、使用package命令打包

到项目的target文件夹中查看生成的文件

可以看到项目生成的jar包和原来相比已经变得很小,同时在lib文件夹里存放了项目所用到的第三方jar包,config文件夹里存放了静态资源文件和配置文件
4、总结
可以根据自己的需求自行更改代码
如果碰到plugin标签报红的情况

仍然可以进行打包,不影响package命令,如果强迫症或者打包失败,也可以导入以下依赖后刷新maven库再进行打包
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>${maven.plugins.version}</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>${maven.plugins.version}</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>${maven.plugins.version}</version>
</dependency>以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
