使用Springboot 打jar包实现分离依赖lib和配置

2022-10-18,,

这篇文章主要介绍了使用Springboot 打jar包实现分离依赖lib和配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

目录
  • 打jar包实现分离依赖lib和配置
    • 操作步骤
  • Springboot中jar包分离(分离lib包)
    • jar包分离介绍
    • jar包分离实施步骤
    • 小结一下

打jar包实现分离依赖lib和配置

为了业务需要配置文件和jar分离,便于使用者修改配置信息,在网上找了很久,最终找到一个简单有效的方法。

操作步骤

打开project工程的pom.xml文件,将下列配置粘贴到pom文件中:

    <properties>
        <java.version>1.8</java.version>
        <!--在此配置打包输出的路径-->
        <directory>d:/out/</directory>
    </properties>
<build>
        <plugins>
            <!--上线部署 JAR启动分离依赖lib和配置-->
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-resources-plugin</artifactId>
                            <version>3.1.0</version>
                        </plugin>
                        <plugin>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-maven-plugin</artifactId>
                        </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <!--不打包资源文件-->
                    <excludes>
                        <exclude>*.**</exclude>
                    </excludes>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <!--jar包不包含唯一版本标识-->
                            <useUniqueVersions>false</useUniqueVersions>
                            <!--程序启动类application.java的路径-->
                            <mainClass>com.sy.xx.Application</mainClass>
                        </manifest>
                        <!-- 指定配置文件目录,这样jar运行时会去找到同目录下的config文件夹下查找 -->
                        <manifestEntries>
                            <Class-Path>config/</Class-Path>
                        </manifestEntries>
                    </archive>
                    <outputDirectory>${directory}</outputDirectory>
                </configuration>
            </plugin>
            <!--拷贝依赖 copy-dependencies-->
            <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>
                                ${directory}/lib/
                            </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!--拷贝资源文件 copy-resources-->
            <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>
                                    <!-- 指定参与构建的resoures-->
                                    <includes>
                                        <include>*.**</include>
                                    </includes>
                                </resource>
                            </resources>
                            <outputDirectory>${directory}/config</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

接下来使用maven package打包即可:

打包之后的样子:

这样就完成了配置文件以及lib包和jar的分离了,并且jar在运行的时候会默认去读取config文件夹中的配置,修改起来非常方便。

Springboot中jar包分离(分离lib包)

jar包分离介绍

springboot构建jar部署,通过使用 java -jar xxx.jar 命令启动服务,非常方便。

但是通过maven构建的jar包含 \BOOT-INF\lib\下的所有依赖jar包,导致jar包文件太大。

本文将lib文件夹下所依赖的jar包分离出来,解决文件过大问题。

jar包分离实施步骤

(1)按照正常的springboot项目打包方式,对项目进行打包package,其打包后目录如下:

|--META-INF
|--BOOT-INF
    |--classes
    |--lib
|--org

打完包后,进行解压。找到\BOOT-INF\lib文件夹,将lib文件夹复制出来,后续使用。

其中\BOOT-INF\lib目录下存放着所有的依赖jar包,ojdbc8-19.8.0.0.jar / lombok-1.18.16.jar / spring-boot-2.4.1.jar … 占用了大量的空间。jar包分离就是将其独立开来。

(2)通过修改pom.xml中的一部分配置,再次打包,此时打包的内容已经排除了其依赖的各种jar包。

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <!--start-->
    <configuration>
        <!--这里对应项目的主入口-->
        <mainClass>com.ityj.multidb.SpringbootMultiDatasourcesApplication</mainClass>
        <layout>ZIP</layout>
        <includes>
            <include>
                <groupId>nothing</groupId>
                <artifactId>nothing</artifactId>
            </include>
        </includes>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
    <!--end-->
    
</plugin>

1:直接重新打包,即可

2:如果通过命令:在idea工具中打入:mvn clean dependency:copy-dependencies -DoutputDirectory=target/lib package

两种方式打包都可以,最终的jar包已经排除掉了lib文件。推荐第一种方便快捷。

(3)将第一次打包提取出来的lib文件夹和第二次打的jar包放在同一个目录下,执行以下命令,启动项目:

java -jar -Dloader.path=./lib springboot-multi-datasources-0.0.1-SNAPSHOT.jar

小结一下

springboot项目什么都不用动,直接通过maven工具package打包,进行解压。并把\BOOT-INF\lib目录下的lib文件夹整个内容复制出来。(取出lib文件夹的内容)

在项目pom.xml中的plugin中加入以下内容,注意层级关系以及要把入口类改成对应的项目名。(start到end的内容)

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <!--start-->
    <configuration>
        <!--这里对应项目的主入口-->
        <mainClass>com.ityj.multidb.SpringbootMultiDatasourcesApplication</mainClass>
        <layout>ZIP</layout>
        <includes>
            <include>
                <groupId>nothing</groupId>
                <artifactId>nothing</artifactId>
            </include>
        </includes>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
    <!--end-->
    
</plugin>

修改后再次package打包,这次的jar包就没有了依赖内容,文件较小。把生成的jar包放在与首次打包生成的lib文件夹同目录下。

执行启动脚本或者命令即可

java -jar -Dloader.path=./lib springboot-multi-datasources-0.0.1-SNAPSHOT.jar

以上为个人经验,希望能给大家一个参考,也希望大家多多支持北冥有鱼。

您可能感兴趣的文章:

  • Spring boot 打jar包分离lib的正确配置方式
  • 详解Spring Boot 打包分离依赖JAR 和配置文件
  • Spring boot打包jar分离lib和resources方法实例
  • 关于Springboot打成JAR包后读取外部配置文件的问题

《使用Springboot 打jar包实现分离依赖lib和配置.doc》

下载本文的Word格式文档,以方便收藏与打印。