springboot将lib和jar分离的操作方法

2025-02-16 05:50

本文主要是介绍springboot将lib和jar分离的操作方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《springboot将lib和jar分离的操作方法》本文介绍了如何通过优化pom.xml配置来减小SpringBoot项目的jar包大小,主要通过使用spring-boot-maven-plugin...

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

优化前:

springboot将lib和jar分离的操作方法

优化后:

springboot将lib和jar分离的操作方法

优化前        

优化后压缩率77.2MB4.65MB93%

具体方案:

pom.XML

  <build>
    <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.5.15</version>
                &ljst;configuration>
                    <!-- 指定该jar包启动时的主类[建议] -->
                    <mainClass>com.ruoyi.RuoYiApplication</mainClass>
                    <!--使用-Dloader.path需要在打包的时候增加<layout>ZIP</layout>,不指定的话-Dloader.path不生效-->
          js          <layout>ZIP</layout>
                    <!--这里是填写需要包含进去的jar,必须项目中的某些模块,会经常变动,那么就应该将其坐标写进来,如果没有则nothing ,表示不打包依赖 -->
                    <includes>
                        <include>
                            <groupId>com.ruoyi</groupId>
                            <artifactId>www.chinasem.cn;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>
                            <!-- 打包的时候将项目中的模块不能打包进去 -->
                            <!--<excludeArtifactIdjavascripts>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冲突报错,如下图)

springboot将lib和jar分离的操作方法

优化前的执行命令 

  AiFVHEgxQ Java -jar ruoyi-admin.jar  

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

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

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

<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>

到此这篇关于springboot如何将lib和jar分离的文章就介绍到这了,更多相关springboot lib和jar分离内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于springboot将lib和jar分离的操作方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153461

相关文章

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

Maven中引入 springboot 相关依赖的方式(最新推荐)

《Maven中引入springboot相关依赖的方式(最新推荐)》:本文主要介绍Maven中引入springboot相关依赖的方式(最新推荐),本文给大家介绍的非常详细,对大家的学习或工作具有... 目录Maven中引入 springboot 相关依赖的方式1. 不使用版本管理(不推荐)2、使用版本管理(推

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

如何在 Spring Boot 中实现 FreeMarker 模板

《如何在SpringBoot中实现FreeMarker模板》FreeMarker是一种功能强大、轻量级的模板引擎,用于在Java应用中生成动态文本输出(如HTML、XML、邮件内容等),本文... 目录什么是 FreeMarker 模板?在 Spring Boot 中实现 FreeMarker 模板1. 环

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Java中的工具类命名方法

《Java中的工具类命名方法》:本文主要介绍Java中的工具类究竟如何命名,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java中的工具类究竟如何命名?先来几个例子几种命名方式的比较到底如何命名 ?总结Java中的工具类究竟如何命名?先来几个例子JD

Java Stream流使用案例深入详解

《JavaStream流使用案例深入详解》:本文主要介绍JavaStream流使用案例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录前言1. Lambda1.1 语法1.2 没参数只有一条语句或者多条语句1.3 一个参数只有一条语句或者多

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依