您当前的位置: 首页 >  ar

杨林伟

暂无认证

  • 3浏览

    0关注

    3337博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Maven的三种打包方式(jar、shade、assembly)

杨林伟 发布时间:2022-01-18 14:30:02 ,浏览量:3

文章目录
  • 01 引言
  • 02 assembly打包
    • 2.1 介绍
    • 2.2 使用
    • 2.3 字段解析
  • 03 jar打包
    • 3.1 介绍
    • 3.2 使用
    • 3.3 字段解析
  • 04 shade打包
    • 4.1 介绍
    • 4.2 使用
    • 4.3 字段解析
  • 05 文末

01 引言

Maven有三种打包方式,分别为:

  • assembly:自定义的打包结构,也可以定制依赖项等;
  • jar:默认的打包方式,用来打普通的project JAR包;
  • shade:用来打可执行jar包,也就是所谓的fat JAR包。

下面来讲解下这三种的打包方式。

02 assembly打包 2.1 介绍

插件:使用maven-assembly-plugin插件 。

我们日常使用比较多的是maven-assembly-plugin插件,例如:大数据项目中往往有很多shell脚本、SQL脚本、.properties.xml配置项等,采用assembly插件可以让输出的结构清晰而标准化。

2.2 使用

首先在pom文件添加以下内容:


    
        
            org.apache.maven.plugins
            maven-assembly-plugin
            ${maven-assembly-plugin.version}
            
                
                    make-assembly
                    
                    package
                    
                        
                        single
                    
                
            
            
                
                src/main/assembly/assembly.xml
                
            
        
    

然后编写描述符文件:


    assembly

    
        tar.gz
    

    true

    
        
            src/main/bin
            
                *.sh
            
            bin
            0755
        
        
            src/main/conf
            conf
        
        
            src/main/sql
            
                *.sql
            
            sql
        
        
            target/classes/
            
                *.properties
                *.xml
                *.txt
            
            conf
        
    

    
        
            target/${project.artifactId}-${project.version}.jar
            .
        
    

    
        
            false
            runtime
            lib
        
    


2.3 字段解析 字段解析formats是assembly插件支持的打包文件格式,有zip、tar、tar.gz、tar.bz2、jar、war。可以同时定义多个formaid是添加到打包文件名的标识符,用来做后缀。也就是说,如果按上面的配置,生成的文件就是artifactId − {artifactId}-artifactId−{version}-assembly.tar.gzfileSets/fileSet用来设置一组文件在打包时的属性directory源目录的路径includes/excludes设定包含或排除哪些文件,支持通配符fileMode指定该目录下的文件属性,采用Unix八进制描述法,默认值是064outputDirectory生成目录的路径files/file与fileSets大致相同,不过是指定单个文件,并且还可以通过destName属性来设置与源文件不同的名称dependencySets/dependencySet用来设置工程依赖文件在打包时的属性,也与fileSets大致相同dependencySet-unpack布尔值,false表示将依赖以原来的JAR形式打包,true则表示将依赖解成*.class文件的目录结构打包dependencySet-scope表示符合哪个作用范围的依赖会被打包进去。compile与provided都不用管,一般是写runtime

按照以上配置打包好后,将.tar.gz文件上传到服务器,解压之后就会得到bin、conf、lib等规范化的目录结构,十分方便。

03 jar打包 3.1 介绍

插件:使用maven-jar-plugin插件

默认的打包方式,用来打普通的project JAR

3.2 使用

   
       
            org.apache.maven.plugins
            maven-jar-plugin
            3.1.0
            
                
                    
                                                     com.xx.main.HelloMavenJar
                        
                        true
                        
                        lib/
                    
                
                
                com/xx/excludes/*
            
        
    

3.3 字段解析

上面3.2的配置使用这个 jar包的时候就需要在它同一级的创建一个lib目录来存放。

可以使用includesexcludes选择的打包某些内容。

04 shade打包 4.1 介绍

插件:使用maven-shade-plugin插件

maven-shade-plugin提供了两大基本功能:

  • 将依赖的jar包打包到当前jar包(常规打包是不会将所依赖jar包打进来的);
  • 对依赖的jar包进行重命名(用于类的隔离);
4.2 使用

  
    
      org.apache.maven.plugins
      maven-shade-plugin
      3.1.1
      
        
      
      
        
          package
          
            shade
          
        
      
    
  

4.3 字段解析

参考:https://blog.csdn.net/yangguosb/article/details/80619481

可以使用excludes排除部分jar包,例如:


  jmock:*
  *:xml-apis
  org.apache.maven:lib:tests
  log4j:log4j:jar:

将依赖jar包内部资源添加或排除,例如:


  META-INF/*.SF
  META-INF/*.DSA
  META-INF/*.RSA

自动将所有不使用的类排除,例如:


  true

将依赖的类重命名并打包进来 (隔离方案),例如将“org.codehaus.plexus.util”重命名为“org.shaded.plexus.util":


  
    org.codehaus.plexus.util
    org.shaded.plexus.util
    
      org.codehaus.plexus.util.xml.Xpp3Dom
      org.codehaus.plexus.util.xml.pull.*
    
  

修改包的后缀名:


   true
   jackofall 
 
05 文末

具体细节可以参考:

  • shade打包官方教程:https://maven.apache.org/plugins/maven-shade-plugin/examples/attached-artifact.html;
  • jar打包官方教程: https://maven.apache.org/shared/maven-archiver/examples/classpath.html;
  • assembly打包官方教程:https://maven.apache.org/plugins/maven-assembly-plugin/examples/single/filtering-some-distribution-files.html
关注
打赏
1662376985
查看更多评论
立即登录/注册

微信扫码登录

0.2980s