配置springboot项目动静分离打包分离lib方式

 更新时间:2025年02月12日 08:42:06   作者:wow_xh  
本文介绍了如何将Spring Boot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建config目录,并在pom文件中进行相应配置,可以实现配置文件的外部化,打包后的jar包和lib文件夹中分别存放了第三方jar包和静态资源文件

前言

默认情况下,我们打包springboot工程时,会将依赖包、配置文件、静态资源和模板一起打包到jar中,这样会导致jar很大并且不容易对配置文件做出修改。

其实,经过简单的配置就可以实现静态资源的分离,做到修改文件不需要重新打包,做到业务不停,不影响已经运行的项目。

1、分离配置文件原理

springboot启动时,会优先使用同级config目录下的配置,如果没有再到包里面搜索。

这是因为 springboot 读取配置有一个优先级,放在jar包外面 config 目录优先级最高,主要是便于从外部修改配置,而不是改 jar 包中的 application.properties文件。优先级如下:

  1. 当前目录的 config 目录下
  2. 当前目录
  3. classpath 的 config 目录下
  4. classpath 的根目录

application.propertiesapplication.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>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • springboot动态切换数据库表方式

    springboot动态切换数据库表方式

    本文分享了使用TableScopeAspectAjk切面和TableScopeAjk注解实现数据库表配置、业务切入点管理及SQL动态配置的经验,旨在提升代码可维护性与灵活性,适用于业务逻辑与数据层的分离开发
    2025-08-08
  • SpringBoot3应用中集成和使用Spring Retry的实践记录

    SpringBoot3应用中集成和使用Spring Retry的实践记录

    SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故障场景,需合理设置次数、退避策略并做好监控,本文给大家详细介绍如何在 SpringBoot 3 应用中集成和使用 Spring Retry,感兴趣的朋友一起看看吧
    2025-06-06
  • Mybatis Select Count(*)的返回值类型介绍

    Mybatis Select Count(*)的返回值类型介绍

    这篇文章主要介绍了Mybatis Select Count(*)的返回值类型,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Maven项目如何查找jar包是由哪个依赖引入的

    Maven项目如何查找jar包是由哪个依赖引入的

    这篇文章主要介绍了Maven项目如何查找jar包是由哪个依赖引入的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Java 实战项目之精品养老院管理系统的实现流程

    Java 实战项目之精品养老院管理系统的实现流程

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用java+Springboot+Maven+mybatis+Vue+Mysql实现一个精品养老院管理系统,大家可以在过程中查缺补漏,提升水平
    2021-11-11
  • 解决eclipse中console控制选项不见了的方法

    解决eclipse中console控制选项不见了的方法

    eclipse是一款用于编译java语言的程序,利用这款软件我们可以制作很多有趣的小程序,也可以制作一些大型的软件项目,有的用户在使用eclipse的时候会遇到console消失的情况,所以本文给大家介绍了解决eclipse中console控制选项不见了的方法,需要的朋友可以参考下
    2024-03-03
  • Java修改PowerPoint幻灯片批注信息

    Java修改PowerPoint幻灯片批注信息

    这篇文章主要介绍了Java修改PowerPoint幻灯片批注信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • java 出现Zipexception 异常的解决办法

    java 出现Zipexception 异常的解决办法

    这篇文章主要介绍了java 出现Zipexception 异常的解决办法的相关资料,出现 java.util.zip.ZipException: error in opening zip file 异常的原因及解决方法,需要的朋友可以参考下
    2017-08-08
  • java中java.util.Date和java.sql.Date之间的转换的示例

    java中java.util.Date和java.sql.Date之间的转换的示例

    java.util.Date是java.sql.Date的父类,有时候在和SqlServer数据库打交道时,也会遇到,本文主要介绍了java中java.util.Date和java.sql.Date之间的转换的示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • MyBatis关联查询的实现

    MyBatis关联查询的实现

    MyBatis可以通过定义多个表的关联关系,实现多表查询,本文主要介绍了MyBatis关联查询的实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11

最新评论