当前位置: 首页 > article >正文

spring-boot-maven-plugin插件 —— 打包时减小jar包的大小方法

Maven 在打包时会将所依赖的 jar 包全部打包进去,包含了所有的依赖和资源文件,就会导致打出来的包比较大。如果再上传服务器,那么耗时特别长。

由于依赖包变化小,占用空间大,而且大部分情况是添加一次后,就会很少去做调整;但每次修改代码,都需要重新把他们构建 jar 中去,往服务器上传、发布,生成大量的资源、带宽、时间的浪费。

于是通过 pom.xml 配置把 lib 和 jar 拆开,配置如下:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${spring-boot-dependencies.version}</version>
            <configuration>
                <!-- 指定该jar包启动时的主类[建议] -->
                <mainClass>com.xh.pack.PachApplication</mainClass>
                <!--使用-Dloader.path需要在打包的时候增加<layout>ZIP</layout>,不指定的话-Dloader.path不生效-->
                <layout>ZIP</layout>
                <!--这里是填写需要包含进去的jar,必须项目中的某些模块,会经常变动,那么就应该将其坐标写进来,如果没有则nothing ,表示不打包依赖 -->
                <includes>
                    <include>
                        <!-- 排除所有Jar -->
                        <groupId>nothing</groupId>
                        <artifactId>nothing</artifactId>
                    </include>
                </includes>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

        <!--拷贝依赖到jar外面的lib目录-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>3.1.1</version>
            <executions>
                <!--导出所有的 jar 包-->
                <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>
    </plugins>
</build>

这种方式打的包,在项目启动时,需要通过 -Dloader.path 指定 lib 的路径

java -Dloader.path=./lib -jar xxx.jar

如果引用的依赖是自己公司的其它模块或私有的依赖,那么就不宜打到外部的 lib,不然就会需要经常上传更新。可以使用保留依赖的方式把依赖文件打包到 jar 中。

补充

layout 配置与 META-INF/MANIFEST.MF 下的信息息息相关,配置关系如下:

JAR:即通常的可执行 jar。

Main-Class: org.springframework.boot.loader.JarLauncher

WAR:即通常的可执行war,需要的servlet容器依赖位于WEB-INF/lib-provided

Main-Class: org.springframework.boot.loader.warLauncher

ZIP:即DIR,类似于JAR

Main-Class: org.springframework.boot.loader.PropertiesLauncher

MODULE:将所有的依赖库打包(scope为provided的除外),但是不打包Spring Boot的任何Launcher

NONE:将所有的依赖库打包,但是不打包Spring Boot的任何Launcher


http://www.kler.cn/a/135140.html

相关文章:

  • SpringBoot实战(三十一)集成iText5,实现RSA签署PDF
  • 如何进行产线高阶能耗数据的计算和可视化?
  • git入门环境搭建
  • zabbix搭建钉钉告警流程
  • Docker compose部署portainer
  • 探索Python的HTTP利器:Requests库的神秘面纱
  • 计算机视觉的基本概念和技术有哪些?
  • html在线生成二维码(附源码)
  • Python自动化测试之requests库(六)
  • java 实现发送邮箱,复制即用,包含邮箱设置第三方登录授权码获取方法
  • 如果K8s出现问题,你可以从这9个方面排查
  • 深入理解 synchronized 原理
  • Pytorch plt.scatter()函数用法
  • 【机器学习算法】机器学习:支持向量机(SVM)
  • 解决ubuntu23.10 wifi不能使用的问题
  • python functools.wraps保留被装饰函数属性
  • 王颖奇:ONES.ai 上线,以及我的一些思考
  • josef约瑟 闭锁继电器 LB-7DG 100V 50HZ 导轨安装
  • Git常用指令-1
  • Spring Boot 项目的常用注解与依赖
  • Nginx快速入门教程,域名转发、负载均衡
  • 米贸搜| 关于Facebook企业户的那些事
  • 【C/C++】递归算法
  • el-table固定表头(设置height)出现内容过多时不能滚动问题
  • C# 依赖注入IServiceCollection
  • 制作Go程序的Docker容器(以及容器和主机的网络问题)