【转】SpringBoot多模块打包瘦身分离


背景

首先项目是个多层级的多模块springBoot项目,每次打出来的jar包都在90M,其中包含核心代码以及所有依赖的jar包,上传到服务器速度比较慢。

由于核心代码(controller、service、dao、model)会经常改动进行发布上线,而依赖的jar包(pom文件的依赖引用)并不是经常更新,所以希望进行分离打包,改动代码只需要上线发布核心jar包(几十KB吧),提高效率。


打包方法

 
步骤1:清理之前的jar包

步骤2:进行重新打包
不分离打包

1、pom文件配置

    
            TC_NLP_Platform
            
                
                    org.springframework.boot
                    spring-boot-maven-plugin
                
            
        


2、 箭头指向的就是完整的可运行的jar包,根据项目的不同大小不同,整体来说还是很大的。

 
分离打包

1、pom文件配置,由于项目是多模块的(分层的),所以打包的时候希望TCSP_Management(controller层)、TCSP_DAO、TCSP_Model、TCSP_Service可以合在一起打成一个核心jar包,其他的依赖打包到另外一个地方,达到核心代码与依赖分离打包的目的。
部分配置解释

a、

     ${project.build.directory}/lib

      将不经常改动的依赖包,打包到lib文件夹下

 b、
    TCSP_Model,TCSP_DAO,TCSP_Service

     目的是排除TCSP_Management(controller层)、TCSP_DAO、TCSP_Model、TCSP_Service,核心的业务包,不打包到lib文件夹下面

   
            TC_NLP_Platform
            
                
                    
                    org.springframework.boot
                    spring-boot-maven-plugin
                    
                        true
                        ZIP
                        
                        
                            
                                TCSP_Model
                                com.toycloud.tcspeech
                            
                            
                                TCSP_DAO
                                com.toycloud.tcspeech
                            
                            
                                TCSP_Service
                                com.toycloud.tcspeech
                            
                        
     
                    
                    
                        
                            
                                repackage
                            
                        
                    
                
                
                
                    org.apache.maven.plugins
                    maven-dependency-plugin
                    
                        
                            copy-dependencies
                            package
                            
                                copy-dependencies
                            
                            
                                
                                ${project.build.directory}/lib
                                false
                                false
                                true
                                
                                TCSP_Model,TCSP_DAO,TCSP_Service
                            
                        
                    
                
            
        


2、 下图中,1表示的就是所有依赖打包后所在的路径,2表示核心代码所在的路径。

核心代码解压后,包含TCSP_DAO、TCSP_Model、TCSP_Service三个核心模块的jar包

发布到服务器运行:

 java -Dloader.path=./lib -Duser.timezone=Asia/Shanghai -jar TC_NLP_Platform.jar

注意:lib文件夹(依赖的jar包)必须和TC_NLP_Platform.jar(核心jar包)在同级目录