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
然后编写描述符文件:
2.3 字段解析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
| 字段 | 解析 |
|---|---|
| formats | 是assembly插件支持的打包文件格式,有zip、tar、tar.gz、tar.bz2、jar、war。可以同时定义多个forma |
| id | 是添加到打包文件名的标识符,用来做后缀。也就是说,如果按上面的配置,生成的文件就是artifactId − {artifactId}-artifactId−{version}-assembly.tar.gz |
| fileSets/fileSet | 用来设置一组文件在打包时的属性 |
| directory | 源目录的路径 |
| includes/excludes | 设定包含或排除哪些文件,支持通配符 |
| fileMode | 指定该目录下的文件属性,采用Unix八进制描述法,默认值是064 |
| outputDirectory | 生成目录的路径 |
| 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 使用3.3 字段解析org.apache.maven.plugins maven-jar-plugin 3.1.0 com.xx.main.HelloMavenJar true lib/ com/xx/excludes/*
上面3.2的配置使用这个 jar包的时候就需要在它同一级的创建一个lib目录来存放。
可以使用includes或excludes选择的打包某些内容。
04 shade打包 4.1 介绍插件:使用maven-shade-plugin插件
maven-shade-plugin提供了两大基本功能:
将依赖的jar包打包到当前jar包(常规打包是不会将所依赖jar包打进来的);对依赖的jar包进行重命名(用于类的隔离); 4.2 使用
4.3 字段解析org.apache.maven.plugins maven-shade-plugin 3.1.1 package shade
参考: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.*
修改包的后缀名:
05 文末true jackofall
具体细节可以参考:
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



