Chapter 12. Maven套件

12.1. 简介

Maven提供了可以用来创建大多数常见归档类型的插件,这些归档类型中的大部分可以由其它项目作为依赖使用。这样的插件有JAR, WAR, EJB, 以及 EAR插件。如在Chapter 10, 构建生命周期中讨论的那样,这些插件对应于不同的项目打包类型,每种类型的构建过程都有微小的差别。虽然Maven有插件及自定义生命周期来支持标准的打包类型,但还是有些时候你需要创建一个自定义格式的归档文件或目录。这样的归档叫做Maven套件(Assembly)。

在很多情况下你需要为你的项目构建自定义的归档。最常见的可能就是项目分发。单词“分发(distribution)”意思是,根据项目将会如何被使用,为不同的人(或项目)提供不同的东西。本质上来说,这些归档是为用户提供一种便捷的方式来安装,否则用户就必须使用项目的发布版本。一些情况下,这可能是构建一个带有应用服务器(如Jetty)的web应用。还有一些情况,可能是包裹了项目API文档,源码,和已编译字节码的JAR文件。当你构建项目的最终分发包的时候,Maven套件就十分有用了。以Chapter 16, 仓库管理器中介绍的Nexus为例,它是一个大型的包含了很多模块Maven项目的产品,而你从Sonatype下载的最终归档就是一个Maven套件。

大多数情况下,Assembly插件十分适用于构建项目的分发包。然而,套件不一定就要是分发包;套件的目的是能让用户灵活的构建任意类型的自定义归档文件。本质上说,套件是为了弥补由项目打包类型所提供的标准归档格式的不足。当然,你可以完全写一个Maven插件来帮助生成你的自定义归档格式,同时创建生命周期映射和构件处理配置来告诉Maven如何部署。但大部分情况下,有了Assembly插件,这就完全没有必要了。该插件为创建自定义归档格式提供了普遍的支持,你不需要花很多时间来编写Maven插件代码。