一.生命周期
Maven中的生命周期就是描述一次maven项目构建要经历那些阶段。包含clean,default和site三个。这三个生命周期时相互独立的。所谓相互独立,就是每套生命周期中的阶段互不干扰。
阶段是生命周期中最细化的操作。我们重点关注5个阶段,分别是clean,compile,test,package和install。在同一套生命周期中,阶段是有先后顺序的,先运行前面的阶段,再运行后面的阶段。后面的阶段依赖于前面的阶段。也就是说在一套生命周期中运行后面的阶段,前面的阶段也会运行。
在maven中的Lifecycle中可以看到这些阶段。
那么运行install阶段时,前面的clean会不会运行,答案是不会,因为是在同一个生命周期中,当运行后面的阶段时,前面的阶段都会运行。而clean和install在不同的两套生命周期中。
二.执行指定生命周期的两种方式
1.clean阶段
执行clean阶段,发现target文件已经被清理。
2.compile阶段
执行compile阶段,发现target文件有了。
3.test阶段
我们要执行test阶段,首先在pom.xml文件中引入单元测试依赖junit。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
接着编写测试代码
package com.gjw.test;
import org.junit.Test;
import org.slf4j.Logger;
public class DemoTest {
@Test
public void test1() {
System.out.println("测试方法1执行了");
}
@Test
public void test2() {
System.out.println("测试方法2执行了");
}
@Test
public void test3() {
System.out.println("测试方法3执行了");
}
}
双击maven中的test执行
可以发现在日志中测试程序已经执行了。
4.package阶段
接下来我们运行package阶段。双击package,发现taget下面已经出现了打包好的jar包。同时发现日志中出现了test阶段的运行结果,这是因为在同一个生命周期中,后一个阶段的运行要依赖于前一个阶段。
5.install阶段
最后执行install阶段,就是将打包好的jar包安装到maven的本地仓库。在执行install阶段之前,首先我们要看一下本地的maven仓库中是否有打包好的maven-project01的jar包。
如果安装好了,那么应该在本地仓库的com下gjw文件夹下,因为我们的组织名(groupId)就是com.gjw,但是发现com中根本没有gjw文件夹,因此并没有安装好。
接着我们执行install
发现我们的com文件夹中已经有了gjw文件夹,打开后可以看到项目。
我们发现前面的单元测试也执行了。
生命周期阶段方式二——在命令行中执行
在该项目中输入cmd打开命令行,输入mvn clean,如果能够将target清除,则执行成功。
target文件夹没有了,成功
三.补充
那么如果我想只执行install而绕过单元测试可以吗?当然可以
我们选中test,点击上面的禁止符号即可。
我们再次执行package阶段。
可以发现测试单元并未执行,显示Tests are skipped.
maven的生命周期以及生命周期的各个阶段是抽象的概念,他并不执行具体的操作。具体操作是由与其绑定maven插件来完成的,因为maven本质就是一个插件执行框架,所有的工作都是由插件执行完成的。在maven面板中可以看到这些具体的插件。