springboot如何将lib和jar分离

遇到一个问题,就是每次maven package或者maven install后target中的jar很大,少的50几MB,大的100多兆

优化前:

优化后:

|--------|--------|-----|
| 优化前 | 优化后 | 压缩率 |
| 77.2MB | 4.65MB | 93% |

具体方案:

pom.xml中

XML 复制代码
  <build>
    <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.5.15</version>
                <configuration>
                    <!-- 指定该jar包启动时的主类[建议] -->
                    <mainClass>com.ruoyi.RuoYiApplication</mainClass>
                    <!--使用-Dloader.path需要在打包的时候增加<layout>ZIP</layout>,不指定的话-Dloader.path不生效-->
                    <layout>ZIP</layout>
                    <!--这里是填写需要包含进去的jar,必须项目中的某些模块,会经常变动,那么就应该将其坐标写进来,如果没有则nothing ,表示不打包依赖 -->
                    <includes>
                        <include>
                            <groupId>com.ruoyi</groupId>
                            <artifactId>ruoyi-framework</artifactId>
                        </include>
                        <include>
                            <groupId>com.ruoyi</groupId>
                            <artifactId>ruoyi-quartz</artifactId>
                        </include>
                        <include>
                            <groupId>com.ruoyi</groupId>
                            <artifactId>ruoyi-quartz</artifactId>
                        </include>
                        <include>
                            <groupId>com.ruoyi</groupId>
                            <artifactId>ruoyi-slw</artifactId>
                        </include>
                        <include>
                            <groupId>com.ruoyi</groupId>
                            <artifactId>ruoyi-system</artifactId>
                        </include>
                        <include>
                            <groupId>com.ruoyi</groupId>
                            <artifactId>ruoyi-common</artifactId>
                        </include>
                        <include>
                            <groupId>com.ruoyi</groupId>
                            <artifactId>ruoyi-generator</artifactId>
                        </include>
                    </includes>
                    <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                    <warName>${project.artifactId}</warName>
                </configuration>
            </plugin>
  
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                            <!-- 打包的时候将项目中的模块不能打包进去 -->
                            <!--<excludeArtifactIds>ruoyi-common,ruoyi-framework,ruoyi-quartz,ruoyi-generator,ruoyi-slw,ruoyi-system</excludeArtifactIds>-->
                            <!-- 所有com.ruoyi开头的项目,都不需要打包进去 -->
                            <excludeGroupIds>com.ruoyi</excludeGroupIds>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

说明:

1、spring-boot-maven-plugin 主要是将项目的依赖lib打包到项目jar中,这样就会导致打包后的jar特别大

2、maven-dependency-plugin 该插件主要是将pom.xml中的jar复制到lib文件夹中,同时需要将项目中的模块排除(<excludeGroupIds>com.ruoyi</excludeGroupIds>,如果项目有多个模块的话,这个请务必加上,否则lib和jar里面都包含相同的lib的话会导致jar冲突报错,如下图)

优化前的执行命令

java -jar ruoyi-admin.jar

优化后的执行命令 需要指定外部lib的路径,.\lib是指jar当前路径下的lib文件夹中查找依赖

java -Dloader.path=.\lib -jar ruoyi-admin.jar

由于windows服务器上面使用的 是winSW工具,需要在arguments中加上指定依赖路径的命令

XML 复制代码
<service>
    <id>slwDataService</id>
    <!-- Display name of the service -->
    <name>slwService</name>
    <!-- Service description -->
    <description>数据报表</description>
    <executable>java</executable>
    <arguments>-Dloader.path=.\lib -jar D:\system_slw\ruoyi-admin.jar</arguments>
    <!-- 开机启动 -->
    <startmode>Automatic</startmode>
    <!-- 日志配置 -->
    <logpath>D:/system_slw/logs</logpath>
    <logmode>none</logmode>
</service>
相关推荐
勇往直前plus18 分钟前
Sentinel微服务保护
java·spring boot·微服务·sentinel
星辰大海的精灵18 分钟前
SpringBoot与Quartz整合,实现订单自动取消功能
java·后端·算法
天天摸鱼的java工程师30 分钟前
RestTemplate 如何优化连接池?—— 八年 Java 开发的踩坑与优化指南
java·后端
一乐小哥31 分钟前
一口气同步10年豆瓣记录———豆瓣书影音同步 Notion分享 🚀
后端·python
LSTM9734 分钟前
如何使用C#实现Excel和CSV互转:基于Spire.XLS for .NET的专业指南
后端
三十_35 分钟前
【NestJS】构建可复用的数据存储模块 - 动态模块
前端·后端·nestjs
武子康37 分钟前
大数据-91 Spark广播变量:高效共享只读数据的最佳实践 RDD+Scala编程
大数据·后端·spark
努力的小郑37 分钟前
MySQL索引(二):覆盖索引、最左前缀原则与索引下推详解
后端·mysql
阿拉伦39 分钟前
智能交通拥堵治理柔性设计实践复盘小结
后端
用户40993225021239 分钟前
如何在 FastAPI 中优雅地模拟多模块集成测试?
后端·ai编程·trae