SpringBoot:拒绝大文件,夏天到了,来给jar包瘦个身

前言

工作中终于遇到比较好玩的东西了,最近被给了一个需求,将pom中的第三方依赖移到外面而不直接打包进jar包。那直接打包有什么问题吗?下面我们一起来看看。

 

直接打包的缺点

首先宣读一下直接打包的“三大罪”!!!

  • 如果项目依赖的第三方包非常多,那么最终提供出去的jar包将非常大,上传所需时间也非常多
  • 如果依赖的第三方包版本升级了,想要直接用最新的版本就只能修改版本然后重新打包了
  • 如果依赖的某个第三方包有安全漏洞,那么必须换版本,换版本的话就必须重新进行打包。就暴露出fastjson的安全漏洞,版本小于1.2.68存在反序列化的漏洞

第二点和第三点差不多,都是由版本导致重新打包
但是如果我们打包时不将依赖的第三方包打包进去,那么最后的jar包不仅小,而且当依赖的第三方版本发生变化时也不需要重新打包了,心动不如行动,现在对自己的项目手起刀落改造一下吧

 

pom文件的修改

在maven项目中配置打包相关的东西是在pom文件中的,一般情况下,在pom中如果不需要将第三方包排除在外,都是这样配置的:


    authsdk-service-${version}
    
        
            org.springframework.boot
            spring-boot-maven-plugin
            
                authsdk-service-${version}
            
            
                
                    
                        repackage
                    
                
            
        
        
            org.apache.maven.plugins
            maven-compiler-plugin
            
                ${project.build.sourceEncoding}
                8
                8
            
        
    

看一下打包后jar包的大小

SpringBoot:拒绝大文件,夏天到了,来给jar包瘦个身_第1张图片

大小为27515KB,可以发现jar包的内容中,在BOOT-INF/lib目录下都是依赖的第三方包

SpringBoot:拒绝大文件,夏天到了,来给jar包瘦个身_第2张图片

发现了吗?真相只有一个!导致打包出来的jar包大的原因就是这些依赖的第三方包。
那既然问题原因出现了,就可以开始对症下药解决问题了,我们对pom文件做一个改动,让它不将第三方依赖打包进去,修改后的配置:

 
    authsdk-service-${version}
    
         
            org.springframework.boot
            spring-boot-maven-plugin
             
                
                com.xxx.authsdk.AuthsdkServiceApplication
                 ZIP
                
                    
                        
                         nothing
                        nothing
                    
                
            
            
                
                    
                        repackage
                    
                 
            
        

        
            org.apache.maven.plugins
            maven-compiler-plugin
            
                 8
                 8
            
        
    

修改完后重新打包

jar包大小变为1702KB,瘦身效果很明显!!!相比之前直接变小了94%,同时查看jar包内容/BOOT-INF下没有lib文件夹了,确实没有将第三方依赖打包进去。
那到这里是不是已经完事了?不,其实还可以做得更好!因为打包时没有将第三方依赖打包进去,因此启动的时候需要指定第三方依赖的位置程序才能正常启动,这就要求我们必须从最开始未瘦身的jar包中将lib文件夹给抠出来,但这样的做法就稍微有点low了。maven提供了一种显示指定lib文件夹保存路径的方法,在之前的pom文件基础上加下如下配置


    org.apache.maven.plugins
    maven-dependency-plugin
    
        
            
                copy-dependencies
            
            
                
                G:/java工程/authorize_service/lib
                provided
                
                false
            
        
    

通过指定lib目录保存路径为当前项目路径下

 

项目启动

因为没有将第三方依赖打包进去,因此启动时必须显示指定第三方依赖路径

  • 相对路径:java -Dloader.path=\lib -jar xxx.jar
  • 绝对路径:java -Dloader.path=/xxx/lib -jar xxx.jar

 

最后

Java的学习是一条漫长的道路,每个地方都是值得学习的内容。

在实际工作中,我们会遇到各种各样的需求,但是不要慌!只要我们静下心来,弄清需求,理清逻辑,打磨细节,做到这三点,绝大部分的难题都可以迎刃而解。

SpringBoot:拒绝大文件,夏天到了,来给jar包瘦个身_第3张图片

SpringBoot:拒绝大文件,夏天到了,来给jar包瘦个身_第4张图片

SpringBoot:拒绝大文件,夏天到了,来给jar包瘦个身_第5张图片

SpringBoot:拒绝大文件,夏天到了,来给jar包瘦个身_第6张图片

 

我自己这段时间整理了一些java最重要最热门的学习方向资料如果有需要的可以【点击此处】领取,里面还有不同方向的学习思维导图、java核心面试题知识点整理、及系列源码笔记等。

欢迎大家一起学习和探讨。

 

 

你可能感兴趣的:(java,jar,spring,boot,maven,jdk)