来讲解一下Maven 2.0 插件的发展
那到底什么是插件呢?
Maven 核心框架就是一个插件的集合。换而言之,这些插件就是行为的执行者,插件可以用于:创建jar文件,war文件,编译代码,单元测试,创建项目文档等等。几乎任何的行为,你都可以认为是这个项目在执行对应的Maven插件。
插件是Maven的核心特性并可以给多个项目重复使用。插件执行的这些行为包含在一个项目描述——项目对象模型(POM)。插件行为可以通过描述每个插件目标(或者是Mojo)的唯一参数而自己定制。
Maven 2.0 其中一个最简单的插件就是clean插件。这个清除插件可以移除Maven 2 项目中target目录东西。当你执行 “mvn clean”,Maven 2 执行这个“清除”目标,然后target目录的内容就被清除了。这个清除插件定义一个参数可以用于自定义插件行为,这个参数被叫做输出目录和它默认为${project.build.directory}。
什么是一个Mojo?(或者 为什么命名为‘Mojo’)
Mojo开始被定义在Maven 2,插件程序由一系列的目标(Mojo)。Mojo可以定义在类似注释的java类或Shell脚本。一个Mojo指定的元数据为 一个目标 :一个目标名,即合适的生命周期,和一些期望参数。
Mojo担当着POJO(普通的JAVA对象),替代 “Maven”的普通。Mojo 也是一个好看的词(看定义)。从维基百科,一个 “mojo” 定义就是“ 。。。一个人衣服下的小包一样”(或者被称为有魔力的手)。这些包通过超自然的力量,如同保护邪恶,带来好运等。
比较 Maven 1.x 的插件
与Maven 1.x的相同之处
Maven 2.0与上一代相似的有两个主要的功能。第一,它组织项目数据在连贯的整体上,和暴露这些数据用于构建过程。第二,Maven协调指挥一个插件在构建过程中的启动和实际运作。
很多在Maven 2.0东西将会更简单面向Maven 1的用户,和插件系统没有异常。Maven 2插件体现了更好的表现相比于 1.x使用。好比在1.x 的插件,他们用着共同的项目信息和自定义配置执行工作。而Maven 2 插件是组织和执行连贯的方式来构建引擎的——也就是说,这个引擎是在插件执行之前,负责组织和填充插件的要求。
操作上,Maven 2.0 应该感觉像一个更高性能的Maven 1.0的兄弟。当pom发生改变,它将会基础的安排和特征(和值得注意的条件)。无论如何,这就是相似的地方了。Maven 2.0 是一个完整的重新设计和Maven构建理念的实现。举个例子,它有很多不同和很多发展架构——至少对于我们来说。
看着似乎相似的架构,Maven 2 提供了更多环境变量让插件使用。新的架构提供管理生命周期,多种实现的语言,可重用性的系统,和更多优点。可以说最大的优点就是可以完全使用java写maven插件,允许开发者可以开发充分发挥和制作测试工具来帮助自己。
在Maven 2.0 之前,构建系统组织相关插件在一个松散的生命周期里,一些确定依赖目标的先决条件和装饰用前目标和后目标。这个批判来自于Maven社区。这告诉我们通过可能100w中不同的构建情节,在构建中很多的行为适合分到少部分的分类。此外,这些适合目标的分类像是构建过程执行中的一个精确的预测。借鉴这些经验,Maven 2.0 定义了管理生命周期的插件和相对应的位置。
Maven 2.0开始的时候,插件实现在不同的程序和不同脚本语言 但共存相同的构建过程。这除去一些插件开发者要学习特定语言的念头更好与maven互动。由稳定性和语言丰富度来减少风险。
Maven 2.0开始的时候 是影响整合多项目直接进入构建的核心架构。在Maven 1.x,很多大项目分裂成相似的构建回避问题,例如 编译一个子集的classes;划分服务端和客户端代码;或者周期性依赖不同程序类库。这个转变让创建额外的复杂构建,由于多次构建不得不创建一个整体的或一个以上的项目。当项目1.x版本确切时,多个新项目版本会时后聪明的时候。反应器创建作为适用于所有的功能,和多项目插件是后来加到反应器的设置里作为一些公共的构建类型。无论如何,这个解决方案(只是解决方法,再加上一些宏)从未集成这些多项目构建过程的想法到maven核心概念架构里。
为什么改变插件的架构?
看了前面这些新版本的部分了,对比老版本总结优点:
- 管理生命周期
- 多种实现语言
- 可重用的构建系统
- 可以用java实现Maven插件