一.生命周期

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面板中可以看到这些具体的插件。
 
 




















