Maven生周期(clean+site+default)
Maven 从大量项目和构建工具中学习和反思,总结了一套高度的,易扩展的生周期。这个生周期将项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有构建过程进行了抽象和统一。
生周期与插件的关系
Maven 生周期是抽象的,其本身不能做任何实际工作,这些实际工作(如源代码编译)都通过调用 Maven 插件 中的插件目标(plugin goal)完成的。为了更好的理解 Maven 生周期、插件以及插件目标三者的关系,我们可以将 Maven 生周期理解成一个抽象父类,将插件理解成其子类,将插件目标理解成子类中重写的方法,其基本结构与下面的示例代码相似。
package net.biancheng.www;
/**
* 模拟 maven 生周期
*/
public abstract class LifeCycle {
//定义构建过程
public void build() {
//模拟生周期各个阶段,即调用插件中目标
clean();
initialize();
compile();
packager();
install();
}
//定义清理的过程
public abstract void clean();
//定义初始化的过程
public abstract void initialize();
//定义编译的过程
public abstract void compile();
//定义打包的过程
public abstract void packager();
//定义安装的过程
public abstract void install();
}
模拟 clean 插件的子类,代码如下。
package net.biancheng.www;
/**
* 子类模拟clean 相关的插件
*/
public abstract class CleanPlugin extends LifeCycle {
//重写父类(生周期)的清理工作
//模拟插件目标
@Override
public void clean() {
System.out.println("清理");
}
}
以上示例中,父类 LifeCycle 模拟的是 Maven 生周期,子类 CleanPlugin 模拟的是 Maven 插件,而子类中重写的 clean() 模拟的是插件目标。
虽然示例中的代码与 Maven 实际代码相去甚远,但它们的基本理念是方法相同的。生周期抽象了构建的各个步骤,定义了它们的执行顺序,但却没有提供具体的实现。插件中完成了对构建过程的实现,想要完成某个构建步骤,调用插件中的一个或多个插件目标即可。
生周期中的每个构建过程都可以绑定一个或多个插件目标,且 Maven 为大多数的构建步骤都绑定了默认的插件。例如,针对源代码编译的插件是 maven-compiler-plugin、针对集成测试的插件是 maven-surefire-plugin 等。
注意:Maven 插件和插件目标了解即可,在本教程后面的章节 Maven 插件中会详细介绍。
三套生周期
Maven 拥有三套标准的生周期:
clean:用于清理项目
default:用于构建项目
site:用于建立项目站点
构建阶段
每套生周期包含一系列的构建阶段(phase),这些阶段是有顺序的,且后面的阶段依赖于前面的阶段。用户与 Maven 最直接的交互方式就是调用这些生周期阶段。以 clean 生周期为例,它包含 pre-clean、clean 以及 post-clean 三个阶段,当用户调用 pre-clean 阶段时,则只有 pre-clean 阶段执行;当用户调用 clean 阶段时,pre-clean 和 clean 阶段都会执行。当用户调用 post-clean 阶段时,则 pre-clean、clean 以及 post-clean 三个阶段都会执行。通过将阶段名传递给 mvn 令,就可以调用构建阶段,例如:
mvn install
生周期的独立性
与构建阶段的前后依赖关系不同,三套生周期本身是相互独立的,用户可以只调用 clean 生周期的某个阶段,也可以只调用 default 生周期的某个阶段,而不会对其他生周期造成任何影响。
clean 生周期
clean 生周期包括以下 3 个阶段。
pre-clean(清理前)
clean(清理)
post-clean(清理后)
我们可以通过在 clean 生周期的各个阶段定义目标来修改这部分的操作行为。
示例 1
下面我们将 maven-antrun-plugin 插件的 run 目标绑定到 pre-clean、clean 和 post-clean 三个阶段中,以实现在 clean 生周期的各个阶段中显示自定义文本信息,pom.xml 配置如下:
<project xmlns="http://maven.apache网站站点" rel="nofollow" />
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< net.biancheng.www:maven >-----------------------
[INFO] Building maven 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-antrun-plugin:1.1:run (www.biancheng网站站点" rel="nofollow" />
<project xmlns="http://maven.apache网站站点" rel="nofollow" />
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< net.biancheng.www:maven >-----------------------
[INFO] Building maven 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-antrun-plugin:1.1:run (www.biancheng网站站点" rel="nofollow" />
<project xmlns="http://maven.apache网站站点" rel="nofollow" />
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< net.biancheng.www:maven >-----------------------
[INFO] Building maven 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-antrun-plugin:1.3:run (www.bianchengbang网站站点" rel="nofollow" />
- 随机文章
- 核心危机(核心危机魔石合成攻略)
- 风儿(风儿轻轻的吹)
- 饿了么红包怎么用(饿了么红包怎么用微信支付)
- 广州4a广告公司(广州4a广告公司创意总监年薪)
- 抖音卡(抖音卡顿怎么解决)
- 兵马俑(兵马俑介绍和历史背景)
- 陈武简历
- 帆船比赛(帆船比赛视频)
- 海猫鸣泣之时游戏(海猫鸣泣之时游戏在哪玩)
- 韩国媳妇和小雪(韩国媳妇和小雪的父亲工资是多少)
- 儋州市第二中学(儋州市第二中学录取分数线)
- 鬼泣5攻略(鬼泣5攻略第三关怎么跳)
- 地球日主题(2020年世界地球日主题)
- 冰客(冰客果汁)
- yy魔兽(yy魔兽世界)
- 国外成人游戏(国外成人游戏注册需要visa信用卡)
- 充值卡代理(充值卡代理加盟)
- 拆奶罩
- 郭妮小说(恶魔的法则郭妮小说)
- 杭同(杭同培训中心怎么样)
- 蝙蝠给人类的一封信(蝙蝠给人类的一封信)
- 大松电饭煲(美的大松电饭煲)
- 服饰加盟(服饰加盟店招商)
- 点对点短信息(点对点短信息费是什么意思)
- 观音普门品(观音普门品念诵全文)
- 河北省大运会(河北省大运会时间)
- 哈利波特官网(哈利波特官网在哪里)
- 杜星霖(杜星霖图片)
- 查传倜(查传倜个人生活)
- 广州晓港公园(广州晓港公园正门图片)
