Maven 2 生命周期、阶段、插件和 mojo
Maven 通过插件动作完成大多数构建任务。可以把 Maven 引擎认为是插件动作的协调器。
插件是适应 Maven 的插件框架的软件模块。现在,可以使用 Java、Ant 或 Beanshell 来创建自定义插件。插件中的每个任务称作一个 mojo。有时,插件也被视为一套相关的 mojo。创建自定义的 Maven 2 插件超出了本教程的范围;参见 参考资料,以获取更多信息。
Maven 2 是预先打包好的,以便于下载,它和许多常用插件一起使用。大多数典型开发任务不需要使用额外插件。
在开始编写自己的插件前,您应该先参考一下列出流行 Maven 2 插件的 Web 站点(参见 参考资料),看一下您需要的插件是不是已经有了。图 5 显示了 Maven Plugin Matrix(参见 参考资料),它提供了许多可用插件的兼容性信息:
Maven 引擎在执行构建生命周期中相应的阶段时,执行插件中的 mojo(构建任务)。插件的 mojo 和生命周期中的阶段间的关联叫做绑定 。插件开发人员能够灵活地将一个或多个生命周期阶段和一个插件关联起来。
Maven 对构建生命周期的固定理解包含了许多不同的阶段。表 1 简短地描述了各个阶段:
生命周期阶段 | 描述 |
---|---|
验证 | 确保当前配置和 POM 的内容是有效的。这包含对 pom.xml 文件树的验证。 |
初始化 | 在执行构建生命周期的主任务之前可以进行初始化。 |
生成源码 | 代码生成器可以开始生成在以后阶段中处理或编译的源代码。 |
处理源码 | 提供解析、修改和转换源码。常规源码和生成的源码都可以在这里处理。 |
生成资源 | 可以生成非源码资源。通常包括元数据文件和配置文件。 |
处理资源 | 处理非源码资源。修改、转换和重定位资源都能在这阶段发生。 |
编译 | 编译源码。编译过的类被放到目标目录树中。 |
处理类 | 处理类文件转换和增强步骤。字节码交织器和常用工具常在这一阶段操作。 |
生成测试源码 | mojo 可以生成要操作的单元测试代码。 |
处理测试源码 | 在编译前对测试源码执行任何必要的处理。在这一阶段,可以修改、转换或复制源代码。 |
生成测试资源 | 允许生成与测试相关的(非源码)资源。 |
处理测试资源 | 可以处理、转换和重新定位与测试相关的资源。 |
测试编译 | 编译单元测试的源码。 |
测试 | 运行编译过的单元测试并累计结果。 |
打包 | 将可执行的二进制文件打包到一个分布式归档文件中,如 JAR 或 WAR。 |
前集成测试 | 准备集成测试。这种情况下的集成测试是指在一个受到一定控制的模拟的真实部署环境中测试代码。这一步能将归档文件部署到一个服务器上执行。 |
集成测试 | 执行真正的集成测试。 |
后集成测试 | 解除集成测试准备。这一步涉及测试环境重置或重新初始化。 |
检验 | 检验可部署归档的有效性和完整性。过了这个阶段,将安装该归档。 |
安装 | 将该归档添加到本地 Maven 目录。这一步让其他可能依赖该归档的模块可以使用它。 |
部署 | 将该归档添加到远程 Maven 目录。这一步让这个工件能为更多的人所用。 |
Maven 从开源社区中汲取了十多年的项目构建管理经验。很难找到一个构建周期不符合表 1 中的生命周期阶段的软件项目。
启动 Maven 2 引擎后,它会按顺序经历表 1 中的各阶段,执行可能与该阶段绑定的 mojo。每个 mojo 则可以使用 Maven 2 丰富的 POM 支持、依赖项管理,也可以访问执行这一专门任务时的构建状态信息。
调用 Maven 2 引擎时,可以将一个生命周期阶段指定为命令行参数。该引擎一直执行到指定的阶段(包括该指定的阶段)。包含的阶段中所有的 mojo 都会被触发。
简短地说,这就是 Maven 2 的操作原理。在下一部分里,您将直接面对操作。对 Maven 操作、它的依赖项管理模型和它的 POM 有了基本的理解,您会发现实践 Maven 2 是一项十分简单的练习