文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-04-02 19:55

关注

打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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯