Maven06-生命周期和插件
- 除了坐标、依赖以及仓库之外,Maven另外两个核心概念是生命周期和插件。
- 在Maven日常使用中,命令行的输入往往就对应了生命周期,如mvn package就表示执行默认生命周期阶段package。Maven的生命周期是抽象的,其实际行为都由插件来完成,如package阶段的任务可能就会由maven-jar-plugin完成。生命周期和插件两者协同工作,密不可分。
1、何为生命周期
- Maven的生命周期就是为了对所有的构建过程进行抽象和统一。Maven从大量项目和构建工具中学习和反思,然后总结了一套高度完善的、易扩展的生命周期。这个生命周期包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有构建步骤。也就是说,几乎所有项目的构建,都能映射到这样一个生命周期上。
- Maven的生命周期是抽象的,这意味着生命周期本身不做任何实际的工作,在Maven的设计中,实际的任务(如编译源代码)都交由插件来完成。这种思想与设计模式中的模板方法(Template Method)非常相似。模板方法模式在父类中定义算法的整体结构,子类可以通过实现或者重写父类的方法来控制实际的行为,这样既保证了算法有足够的可扩展性,又能够严格控制算法的整体结构。
- 生命周期抽象了构建的各个步骤,定义了它们的次序,但没有提供具体实现。那么谁来实现这些步骤呢?不能让用户为了编译而写一堆代码,为了测试又写一堆代码,那不就成了大家在重复发明轮子吗?Maven当然必须考虑这一点,因此它设计了插件机制。每个构建步骤都可以绑定一个或者多个插件,而且Maven为大多数构建步骤编写并绑定了默认插件。例如,针对编译的插件有maven-compiler-plugin,针对测试的插件有maven-surefire-plugin等,在大多数时间里,用户几乎都不会觉察到插件的存在。当用户有特殊需要的时候,也可以配置插件定制构建行为,甚至自已编写插件。
- Maven定义的生命周期和插件机制一方面保证了所有Maven项目有一致的构建标准,另一方面又通过默认插件简化和稳定了实际项目的构建。此外,该机制还提供了足够的扩展空间,用户可以通过配置现有插件或者自行编写插件来白定义构建行为。
1
# #