当前位置:

首页 > 编程开发 > 怎么使用springboot打包插件去除jar包瘦身

怎么使用springboot打包插件去除jar包瘦身

1、pom文件配置1.1添加maven-dependency-plugin插件用于将引用的jar包拷贝到指定的路径便于后续tomcat启动指定依赖包路径org.apache.maven.pluginsmaven-dependency-plugincopypackagecopy-dependencies${project.build.directory}/lib使用这个插件构建完之后的目录结构多了一个lib目录(即上述配置的outputDirectory指定的路径),里面是依赖的jar包:1.2spring

本文目录

    1、pom文件配置

    1.1 添加maven-dependency-plugin插件用于将引用的jar包拷贝到指定的路径

    便于后续tomcat启动指定依赖包路径

    
    
        org.apache.maven.plugins
        maven-dependency-plugin
        
            
                copy
                package
                
                    copy-dependencies
                
                                
                    
                        ${project.build.directory}/lib
                    
                
            
        
    

    使用这个插件构建完之后的目录结构多了一个lib目录(即上述配置的outputDirectory指定的路径),里面是依赖的jar包:

    怎么使用springboot打包插件去除jar包瘦身

    怎么使用springboot打包插件去除jar包瘦身

    1.2 springboot项目使用spring-boot-maven-plugin打包插件

    
        org.springframework.boot
        spring-boot-maven-plugin
        
            true
         ZIP
            
                com.iasp.BasicStarter
            
            
            
                
                    ${groupId}
                    ${artifactId}
                
             
               
                 
            
            
            
                
                
                
            
        
    
        
            
                
                    repackage
                
            
        
    

    配置上述打包之后就会排除相应的jar包,使得由插件打成的Flat jar包大小变小,便于上传服务器发布,效果如下,BOOT-INF目录下的lib目录没有了:

    怎么使用springboot打包插件去除jar包瘦身

    原先打成的jar包里的结构为

    怎么使用springboot打包插件去除jar包瘦身

    然后在启动项目时指定jar包路径-Dloader.path="../lib",这样就可以达到瘦身效果了,其中依赖放在D:develop/shared/fjar目录下,执行运行命令

    java -Dloader.path="D:develop/shared/fjar" -jar mytest.jar

    附注:另外一种启动方案是可以不加-Dloader.path="D:develop/shared/fjar"来指定路径,直接使用如下指令启动

    java -jar mytest.jar

    使用上述启动的话需要添加maven-jar-plugin插件,配置属性,另外在处理一些读取可执行jar中的文件时,可以使用maven-jar-plugin插件替换spring-boot-maven-plugin进行打包操作

    
        org.apache.maven.plugins
        maven-jar-plugin
        
            
                
                    
                    true
                    
                    lib/
                    com.common.util.CommonUtilsApplication
                
            
        
    

    上述插件效果就是在打成的包里META_INF目录下的MANIFEST.MF文件里增加Class-path对应jar,这样在后面应用刚启动时就会根据Class-Path的只去加载需要的版本依赖(解决在共享目录里存在多版本加载引用冲突问题),这个效果就等效加参数-classpath xxx(具体的jar)。

    此时就是将需要的jar目录lib放在和要运行的xxx.jar同级目录即可,启动时就可以不加-Dloader.path参数了,如果lib目录和要运行的xxx.jar不在同级目录的话,则需要使用-Dloader.path来启动

    怎么使用springboot打包插件去除jar包瘦身

    如下:在同一级目录启动

    怎么使用springboot打包插件去除jar包瘦身

    不在同一级目录启动:

    怎么使用springboot打包插件去除jar包瘦身

    其中-Dloader.path可以指定多个目录,这样在存在多个微服务情况下可将一些公共用到的jar放在一个共享目录中,每个微服务独有的jar可以放在微服务私有的目录下(解决jar版本冲突问题),示例如下:

    怎么使用springboot打包插件去除jar包瘦身

    注意:

    1、使用-Dloader.path需要在打包的时候增加ZIP,不指定的话-Dloader.path不生效

    对于多个微服务瘦身打包建议使用maven-jar-plugin打包,避免因为spring-boot-maven-plugin打包机制导致的一些应用启动问题(已踩坑)

    2、若存在不同版本依赖:

    比如项目A依赖Y库的1.0版本,项目B依赖Y库的2.0版本,那么可能会出现版本依赖冲突(两个版本不兼容的情况下),解决方案:

    2.1、能做到版本一致就保持使用同一个版本,保证版本一致。可以使用maven的版本依赖管理进行处理,即在父pom文件使用统一管理依赖版本

    2.2、让项目各自依赖所需的版本并打进war包中,把其他同版本的jar包放在同一个共享包下

    测试发现依赖在查找时从上往下找,匹配到就用第一个,如下图会使用comm-0.0.1.jar版本的

    怎么使用springboot打包插件去除jar包瘦身

    附注:

    使用spring-boot-maven-plugin插件,会将依赖的jar包全部打包进去,这样就可以直接运行生成的 JAR 包,简化了我们开发操作。

    使用spring-boot-maven-plugin插件如果不指定程序主运行入口类的话默认为Main-Class: org.springframework.boot.loader.JarLauncher

    怎么使用springboot打包插件去除jar包瘦身

    这个可以自定义执行主入口类,有以下几种方式:

    1.POM继承spring-boot-starter-parent

    
            org.springframework.boot
            spring-boot-starter-parent
            2.1.9.RELEASE
             
        
    
            
            ccom.notes.JavaNotesApplication
    

    2.POM不是继承spring-boot-starter-parent时需指定

    
      org.springframework.boot
      spring-boot-maven-plugin
      2.1.9.RELEASE
      
        com.notes.JavaNotesApplication
        ZIP
      
      
        
          
            repackage
          
        
      
    

    3.POM不是继承spring-boot-starter-paren,且使用maven-jar-plugin插件来指定执行的类

    
       org.springframework.boot
       spring-boot-maven-plugin
    
    
       org.apache.maven.plugins
       maven-jar-plugin
       
          
             
                true
                false
                lib/
                com.notes.JavaNotesApplication
             
             
                ${project.version}
             
          
       
    
    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    通过实战案例学习如何高效使用httpclient.jar
    通过实战案例学习如何高效使用httpclient.jar

    ApacheHttpClient是处理HTTP通信的强大工具库,能简化网络操作并提升效率。首先需配置HttpClient实例,设置超时和连接池以优化性能。通过各类请求对象发送GET或POST等请求,并正确处理响应状态码和响应体,注意使用try-with-resources管理资源。高级功能包括连接池管理、重试机制和拦截器,有助于增强健壮性。实践中应复用客户端

    NIO文件系统异常分析与解决方法
    NIO文件系统异常分析与解决方法

    在使用nio加载文件时,在idea中运行没有问题,但打成jar包后在windows和linux下都有问题:代码语言:javascript代码运行次数:0运行复制publicstaticvoidmain(String[]args)throwsException{//SpringApplication.run(MarketCollectApplication.class,args);URIuri=MarketCollectApplication.cla

    springBoot项目常用目录有哪些
    springBoot项目常用目录有哪些

    springBoot项目常用目录springBoot项目的目录结构及名规范介绍基于SpringBoot开发时的目录结构及命名规范,通过介绍能够为你解决,在实际项目中如何规划目录结构?如何命名目录更规范?各个目录分别代表什么含义?等三个问题。目录说明servicex//项目名|-admin-ui//管理服务前端代码(一般将UI和SERVICE放到一个工程中,便于管理)|-servicex-auth//模块1|-servicex-common//模块2|-servicex-gateway//模块3|-serv

    在 Linux 系统中如何执行 Java 可执行文件
    在 Linux 系统中如何执行 Java 可执行文件

    运行JAR文件的先决条件在Linux系统上运行JAR文件需要安装Java运行时环境(JRE),它是执行Java应用程序所需的基本组件,包括Java虚拟机(JVM)、核心类库等。许多主流Linux发行版,如Ubuntu、Debian、Fedora、openSUSE等,都提供了JRE包的软件库,方便用户进行安装。后文将详细介绍在流行的发行版上安装JRE的步骤。设置完JRE后,可以根据个人喜好选择使用命令行终端或图形用户界面来启动JAR文件。您的选择可能取决于对Linuxshell的熟悉程度和个人偏好。在Lin

    Maven实践技巧:简便导入Jar包的实用方法
    Maven实践技巧:简便导入Jar包的实用方法

    Maven实战指南:轻松导入Jar包的实用技巧Maven是Java项目管理工具中使用广泛的一个工具,通过它可以有效管理项目的构建、依赖等。在Java开发中,经常会遇到需要导入第三方Jar包的情况,而Maven可以帮助我们高效地管理这些依赖。本文将介绍几种实用的技巧,帮助读者轻松导入Jar包,并附带具体的代码示例。技巧一:在pom.xml文件中添加依赖在Mav

    解析SpringBoot和SpringMVC之间的异同
    解析SpringBoot和SpringMVC之间的异同

    解析SpringBoot和SpringMVC之间的异同SpringBoot和SpringMVC是Java领域中非常重要的开发框架。虽然它们都属于Spring框架的一部分,但是在使用和功能上有一些明显的区别。本文将对SpringBoot和SpringMVC进行比较,解析它们之间的异同。首先,让我们来了解一下SpringBoot。SpringBo

    探索SpringCloud和SpringBoot在微服务领域的不同应用方式
    探索SpringCloud和SpringBoot在微服务领域的不同应用方式

    近年来,随着云计算和分布式架构的兴起,微服务架构的应用越来越广泛。而SpringCloud和SpringBoot作为Java开发中的两个重要框架,对于微服务的实现起到了重要的作用。然而,很多人对于它们在微服务领域的不同应用方式还存在一定的疑惑。本文将从不同的角度探索SpringCloud和SpringBoot在微服务中的应用方式。首先,我们来了解一下Spri

    SpringBoot和SpringMVC有何区别?
    SpringBoot和SpringMVC有何区别?

    SpringBoot与SpringMVC的不同之处在哪里?SpringBoot和SpringMVC是两个非常流行的Java开发框架,用于构建Web应用程序。尽管它们经常分别被使用,但它们之间的不同之处也是很明显的。首先,SpringBoot可以被看作是一个Spring框架的扩展或者增强版。它旨在简化Spring应用程序的初始化和配置过程,以帮助开发人

    比较SpringBoot和SpringMVC的异同
    比较SpringBoot和SpringMVC的异同

    SpringBoot和SpringMVC都是Java开发中常用的框架,但它们之间有一些明显的差异。本文将探究这两个框架的特点和用途,并对它们的差异进行比较。首先,我们来了解一下SpringBoot。SpringBoot是由Pivotal团队开发的,它旨在简化基于Spring框架的应用程序的创建和部署。它提供了一种快速、轻量级的方式来构建独立的、可执行

    SpringBoot与SpringMVC的不同点是什么?
    SpringBoot与SpringMVC的不同点是什么?

    SpringBoot和SpringMVC是Java开发中常用的两个框架,它们都是由Spring框架所提供的,但在功能和使用方式上有着一些区别。本文将分别介绍SpringBoot和SpringMVC的特点和区别。一、SpringBoot的特点:简化配置:SpringBoot通过约定优于配置的原则,大大简化了项目的配置过程。它可以自动配置项目所需要的参数,开发人

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。