189 8069 5689

怎么使用springboot打包插件去除jar包瘦身-创新互联

这篇文章主要介绍“怎么使用springboot打包插件去除jar包瘦身”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用springboot打包插件去除jar包瘦身”文章能帮助大家解决问题。

网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、微信小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了友好免费建站欢迎大家使用!

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}
         
      
   

关于“怎么使用springboot打包插件去除jar包瘦身”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注创新互联行业资讯频道,小编每天都会为大家更新不同的知识点。


本文名称:怎么使用springboot打包插件去除jar包瘦身-创新互联
标题来源:http://cdxtjz.cn/article/diodid.html

其他资讯