maven打包
1. 背景
工程中免不了要通过maven打包。
2. maven三种打包插件
| plugin | function | site |
| maven-jar-plugin | maven 默认打包插件,用来创建 project jar | |
| maven-shade-plugin | 用来打可执行包,executable(fat) jar | http://maven.apache.org/plugins/maven-shade-plugin/ |
| maven-assembly-plugin | 支持定制化打包方式,例如,apache 项目的打包方式 | http://maven.apache.org/components/plugins/maven-assembly-plugin/ |
我们主要打zip包,也就是使用maven-assembly-plugin。
3. maven assembly plugin
maven assembly plugin允许用户将依赖项、模块、文档和其他文件聚合到一个可发布的归档文件中。
我们可以通过预制的描述文件打包文件,这些描述可以处理常见操作,比如打包工程包和文件到一个zip文件里面。
其实我们也可以自定义描述文件对依赖包,模块,file-sets和单个文件更高级别的控制。
当前支持如下格式的文件打包:
- zip
- tar
- tar.gz (or tgz)
- tar.bz2 (or tbz2)
- tar.snappy
- tar.xz (or txz)
- jar
- dir
- war
- and any other format that the ArchiveManager has been configured for
假如你想把工程打包成一个uber-jar,可以参考Maven Shade Plugin,不在本文讨论范围。
使用maven assembly plugin的步骤如下:
- 自定义assembly描述文件,可以参考Assembly Descriptor Format
- 在工程的pom.xml文件里面配置assembly plugin
- 运行mvn assembly:single命令
4. 实例
首先给个官方的demo地址
4.1 创建一个maven工程mvnassembly
为了演示创建lib文件夹,放入随意两个jar包,创建资源目录src/main/resources,并随机放入一个文件。
创建完之后目录结构如下:
4.2 自定义assembly描述文件-assembly.xml
assembly.xml文件与pom.xml同级,内容如下:
描述文件格式请参考:http://maven.apache.org/components/plugins/maven-assembly-plugin/assembly.html
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> <id>myzipid> <formats> <format>zipformat> formats> <fileSets> <fileSet> <directory>libdirectory> <outputDirectory>liboutputDirectory> fileSet><fileSet> <directory>src/main/resourcesdirectory> <outputDirectory>.outputDirectory> fileSet> fileSets> <dependencySets> <dependencySet> <outputDirectory>liboutputDirectory> <useProjectArtifact>falseuseProjectArtifact> <scope>runtimescope> dependencySet> dependencySets> assembly>
4.3 在工程的pom.xml文件里面配置assembly plugin
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0modelVersion> <groupId>com.lujiangogroupId> <artifactId>mvnassemblyartifactId> <version>0.0.1-SNAPSHOTversion> <packaging>jarpackaging> <name>mvnassemblyname> <url>http://maven.apache.orgurl> <properties> <project.build.sourceEncoding>UTF-8project.build.sourceEncoding> properties> <dependencies> <dependency> <groupId>junitgroupId> <artifactId>junitartifactId> <version>3.8.1version> <scope>testscope> dependency> <dependency> <groupId>org.apache.commonsgroupId> <artifactId>commons-collections4artifactId> <version>4.0version> dependency> dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.pluginsgroupId> <artifactId>maven-assembly-pluginartifactId> <version>2.2version> <configuration> <descriptors> <descriptor>assembly.xmldescriptor> descriptors> configuration> <executions> <execution> <id>make-assemblyid> <phase>packagephase> <goals> <goal>singlegoal> goals> execution> executions> plugin> plugins> build> project>
4.4 打包
因为我使用的是eclipse,所以我直接通过右击工程->Run As-> Maven clean,然后在右击工程->Run As->Maven install,就可以打包了。
4.5 检查zip包
打出的包为mvnassembly-0.0.1-SNAPSHOT-myzip.zip,符合artifactId-version-id.zip命名格式。
打开zip包,是一个文件夹:
点击进入:
进入lib目录:
验证是OK。