Maven 2 生命周期、阶段、插件和 mojo
Maven 通过插件动作完成大多数构建任务。可以把 Maven 引擎认为是插件动作的协调器。
插件中的 Mojo
插件是适应 Maven 的插件框架的软件模块。现在,可以使用 Java、Ant 或 Beanshell 来创建自定义插件。插件中的每个任务称作一个 mojo。有时,插件也被视为一套相关的 mojo。创建自定义的 Maven 2 插件超出了本教程的范围;参见 参考资料,以获取更多信息。
Maven 2 是预先打包好的,以便于下载,它和许多常用插件一起使用。大多数典型开发任务不需要使用额外插件。
在开始编写自己的插件前,您应该先参考一下列出流行 Maven 2 插件的 Web 站点(参见 参考资料),看一下您需要的插件是不是已经有了。图 5 显示了 Maven Plugin Matrix(参见 参考资料),它提供了许多可用插件的兼容性信息:
图 5. Maven Plugin Matrix
回页首
将 mojo 绑定到生命周期各阶段
Maven 引擎在执行构建生命周期中相应的阶段时,执行插件中的 mojo(构建任务)。插件的 mojo 和生命周期中的阶段间的关联叫做绑定 。插件开发人员能够灵活地将一个或多个生命周期阶段和一个插件关联起来。
回页首
默认的生命周期的各阶段
Maven 对构建生命周期的固定理解包含了许多不同的阶段。表 1 简短地描述了各个阶段:
表 1. Maven 2 默认生命周期的各阶段
生命周期阶段
描述
验证 |
确保当前配置和 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 是一项十分简单的练习
分享到:
相关推荐
Maven插件可以与Maven的生命周期阶段关联,例如,可以在`compile`阶段之前或之后执行。使用`@phase`注解可以指定Mojo的生命周期阶段。 5. **参数传递**: Maven插件可以通过命令行参数、`pom.xml`配置或默认值...
在Java开发领域,Maven是广泛使用的项目管理工具,它帮助开发者构建、依赖管理和项目...开发者需要理解Maven的生命周期和插件机制,才能灵活地设计和实现自定义插件。同时,良好的文档和测试也是确保插件质量的关键。
在Java开发领域,Maven是一个广泛使用的项目管理工具,它帮助开发者构建、管理和部署应用程序。...`demo-maven-plugin`和`mavenplugintest`这两个文件为我们提供了一个实践和学习Maven插件开发的实例。
- **生命周期(Lifecycle)**:Maven有三个主要的生命周期阶段:`clean`(清理)、`default`(构建)和`site`(站点生成)。每个阶段包含一系列的阶段(phase),如`compile`、`test`、`package`等。 - **插件...
第7章:生命周期和插件/7.4 插件绑定/7.4.2 自定义生命周期和插件的绑定 第7章:生命周期和插件/7.5 插件配置/7.5.1 命令行插件参数设置 第7章:生命周期和插件/7.5 插件配置/7.5.2 POM文件中进行插件参数设置 第7章...
Maven 2 的生命周期定义了一系列阶段(如编译、测试、打包等),每个阶段由一个或多个Mojo(Maven插件的目标)执行。Mojo 是 Maven 插件的具体任务,例如`compile`目标用于编译源代码,`test`目标用于运行单元测试。...
此外,Maven的生命周期和构建阶段概念使得构建流程标准化,便于理解和维护。 **三、Maven3原理** Maven的核心原理是基于Project Object Model (POM)的概念。POM是一个XML文件,包含了项目的配置信息,如依赖、构建...
理解Maven生命周期和插件机制是掌握Mojo的关键。 总之,"mojo-mojo编程示例工程之SimpleRegisters.zip"提供的示例可以帮助我们更好地理解和实践Mojo的创建和使用,从而提升在Maven环境下的开发效率和灵活性。通过...
Maven生命周期包括清理(clean)、默认(default)和安装(install)三个主要阶段。默认阶段又分为多个阶段,如compile、test、package、install和deploy。 1. **清理阶段**:用于删除先前的构建结果,如`mvn clean...
在Java开发领域,Maven是一个不可或缺的构建工具,它通过管理项目的依赖关系,简化了构建...对于`maven plugin打包下载`这个主题,理解其工作原理、生命周期和配置方式至关重要,这将直接影响到项目的构建和打包过程。
Maven生命周期 (Lifecycle) 3.5.3. Maven坐标 (Coordinates) 3.5.4. Maven仓库(Repositories) 3.5.5. Maven依赖管理 (Dependency Management) 3.5.6. 站点生成和报告 (Site Generation and Reporting) 3.6. ...
Maven的生命周期包括清理(clean)、初始化(initialize)、编译(compile)、测试(test)、打包(package)、验证(verify)、安装(install)和部署(deploy)等阶段。每个阶段都有一系列相关的Mojo(Maven插件的...
用户可以通过两种方式调用 Maven 插件目标,一种是将插件目标与生命周期阶段(lifecycle phase)绑定,另一种是直接在命令行指定要执行的插件目标。 Maven 官方提供了两个插件列表,第一个列表的 GroupId 为 org....
5. **插件生命周期**:Maven插件的执行是与Maven生命周期紧密关联的,学习源码可以帮助我们理解在哪个生命周期阶段执行哪些操作。 6. **异常处理与日志**:源码中可能包含异常处理逻辑和日志记录,这些都是实际开发...
Mojo在XML格式的插件配置文件中定义,并通过Maven生命周期来调用执行。 Mojo的结构通常包括以下几个部分: 1. **名称和包名**:每个Mojo都需要一个唯一的全限定类名,例如`org.apache.maven.plugins:maven-jar-...
Mojo则是Maven插件的目标,是Maven生命周期中的最小可执行单元,它是一个Java类,用于执行特定的任务。 在“mojo-mojo编程示例工程之CheckTicTacToe.zip”这个压缩包中,我们很显然看到一个与Mojo相关的示例项目,...
通过POM,Maven能够管理项目的生命周期,包括编译、测试、打包、部署等阶段,以及执行插件(Mojo)来扩展功能。 ### 依赖管理 Maven 2的依赖管理模型解决了项目之间依赖关系的复杂性。它允许开发者声明项目所需的...
在开发自定义插件时,理解Maven生命周期和构建阶段也很重要。插件目标可以绑定到生命周期的特定阶段,如`compile`、`install`或`deploy`,使得它们在特定时刻自动执行。 此外,插件还可以通过Maven的表达式语言(${...