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会出现在zip包名称的后面,zip的完整名是:pom.xml中的artifactId-version-id.zip --> <id>myzip</id> <!--支持的打包格式有zip、tar、tar.gz (or tgz)、tar.bz2 (or tbz2)、jar、dir、war--> <formats> <format>zip</format> </formats> <!-- 这里指定需要包含的其他文件 --> <fileSets> <!--管理一组文件的存放位置--> <fileSet> <!--源目录--> <directory>lib</directory> <!--放在哪--> <outputDirectory>lib</outputDirectory> </fileSet><fileSet> <directory>src/main/resources</directory> <outputDirectory>.</outputDirectory> </fileSet> </fileSets> <!-- 用来定制工程依赖 jar包的打包方式,依赖包的输出路径 --> <dependencySets> <dependencySet> <!--依赖jar包的输出目录--> <outputDirectory>lib</outputDirectory> <useProjectArtifact>false</useProjectArtifact> <scope>runtime</scope> </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.0</modelVersion> <groupId>com.lujiango</groupId> <artifactId>mvnassembly</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>mvnassembly</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> <version>4.0</version> </dependency> </dependencies> <build> <plugins> <!-- 打包插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.2</version> <configuration> <descriptors> <!-- 指定描述文件 --> <descriptor>assembly.xml</descriptor> </descriptors> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </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。