Mavan生命周期

Maven构建生命周期

 Maven构建生命周期定义了一个项目构建跟发布的过程。

 一个典型的Maven构建(build)生命周期是由以下几个阶段的序列组成的:

阶段 处理 描述
验证 validate 验证项目 验证项目是否正确且所有必须信息是可用的
编译 compile 执行编译 源代码编译在此阶段完成
测试 Test 测试 使用适当的单元测试框架(例如JUnit)运行测试。
包装 package 打包 创建JAR/WAR包如在 pom.xml 中定义提及的包
检查 verify 检查 对集成测试的结果进行检查,以保证质量达标
安装 install 安装 安装打包的项目到本地仓库,以供其他项目使用
部署 deploy 部署

拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程

 这些阶段将按顺序进行执行。

MAVEN有以下三个标准的生命周期:

Clean:项目清理的处理

Default(或build):项目部署的处理

Site:项目站点文档创建的处理

一.Clean生命周期

当我们执行mvn post-clean命令时,Maven调用clean生命周期,它包含以下阶段:

  1. pre-clean:执行一个需要在clean之前完成的工作
  2. Clean:移除所有上一次构建生成的文件。
  3. Post-clean:执行一些需要在clean之后立刻完成的工作。

Mvn clean中的clean就是上面的clean,在一个生命周期中,运行某个阶段的时候,他之前的阶段都会被运行,也就是说,执行mvn clean将运行以下两个生命周期阶段pre-clean ,clean。

我们将maven-antrun-plugin:run目标添加到 pre-clean、clean 和 post-clean 阶段中。这样我们可以在 clean 生命周期的各个阶段显示文本信息。

pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.zk.mymaven_001</groupId>
    <artifactId>mymaven_001</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mymaven_001</name>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
                </plugin>
                <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.1</version>
                <executions>
                    <execution>
                    <id>id.pre-clean</id>
                    <phase>pre-clean</phase>
                    <goals>
                    <goal>run</goal>
                    </goals>
                    <configuration>
                        <tasks>
                        <echo>pre-clean phase</echo>
                        </tasks>
                    </configuration>
                    </execution>
                    <execution>
                    <id>id.clean</id>
                    <phase>clean</phase>
                    <goals>
                    <goal>run</goal>
                    </goals>
                    <configuration>
                        <tasks>
                        <echo>clean phase</echo>
                        </tasks>
                    </configuration>
                    </execution>
                    <execution>
                    <id>id.post-clean</id>
                    <phase>post-clean</phase>
                    <goals>
                    <goal>run</goal>
                    </goals>
                    <configuration>
                        <tasks>
                        <echo>post-clean phase</echo>
                        </tasks>
                    </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

 运行后结果如下:

 二.Default(Build)生命周期

这是Maven的主要生命周期,被用于构建应用,包括以下23个阶段:

生命周期阶段 描述
validate(校验) 校验项目是否正确并且所有必要的信息可以完成项目的构建过程。
initialize(初始化) 初始化构建状态,比如设置属性值。
generate-sources(生成源代码) 生成包含在编译阶段中的任何源代码。
process-sources(处理源代码) 处理源代码,比如说,过滤任意值。
generate-resources(生成资源文件) 生成将会包含在项目包中的资源文件。
process-resources (处理资源文件) 复制和处理资源到目标目录,为打包阶段最好准备。
compile(编译) 编译项目的源代码。
process-classes(处理类文件) 处理编译生成的文件,比如说对Java class文件做字节码改善优化。
generate-test-sources(生成测试源代码) 生成包含在编译阶段中的任何测试源代码。
process-test-sources(处理测试源代码) 处理测试源代码,比如说,过滤任意值。
generate-test-resources(生成测试资源文件) 为测试创建资源文件。
process-test-resources(处理测试资源文件) 复制和处理测试资源到目标目录。
test-compile(编译测试源码) 编译测试源代码到测试目标目录。
process-test-classes(处理测试类文件) 处理测试源码编译生成的文件。
test(测试) 使用合适的单元测试框架运行测试(Juint是其中之一)。
prepare-package(准备打包) 在实际打包之前,执行任何的必要的操作为打包做准备。
package(打包) 将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。
pre-integration-test(集成测试前) 在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。
integration-test(集成测试) 处理和部署项目到可以运行集成测试环境中。
post-integration-test(集成测试后) 在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。
verify (验证) 运行任意的检查来验证项目包有效且达到质量标准。
install(安装) 安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。
deploy(部署) 将最终的项目包复制到远程仓库中与其他开发者和项目共享。

 Build生命周期的pom.xml文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.zk.mymaven_001</groupId>
    <artifactId>mymaven_001</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mymaven_001</name>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.1</version>
                <executions>
                <execution>
                <id>id.validate</id>
                     <phase>validate</phase>
                     <goals>
                        <goal>run</goal>
                     </goals>
                     <configuration>
                        <tasks>
                           <echo>validate phase</echo>
                        </tasks>
                     </configuration>
                </execution>
                <execution>
                <id>id.compile</id>
                     <phase>compile</phase>
                     <goals>
                        <goal>run</goal>
                     </goals>
                     <configuration>
                        <tasks>
                           <echo>compile phase</echo>
                        </tasks>
                     </configuration>
                </execution>
                <execution>
                <id>id.test</id>
                     <phase>test</phase>
                     <goals>
                        <goal>run</goal>
                     </goals>
                     <configuration>
                        <tasks>
                           <echo>test phase</echo>
                        </tasks>
                     </configuration>
                </execution>
                <execution>
                <id>id.package</id>
                     <phase>package</phase>
                     <goals>
                        <goal>run</goal>
                     </goals>
                     <configuration>
                        <tasks>
                           <echo>package phase</echo>
                        </tasks>
                     </configuration>
                </execution>
                <execution>
                <id>id.deploy</id>
                     <phase>deploy</phase>
                     <goals>
                        <goal>run</goal>
                     </goals>
                     <configuration>
                        <tasks>
                           <echo>deploy phase</echo>
                        </tasks>
                     </configuration>
                </execution>
                </executions>
            </plugin>
        </plugins>
        <pluginManagement>
            <plugins>
                <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
                <plugin>
                    <groupId>org.eclipse.m2e</groupId>
                    <artifactId>lifecycle-mapping</artifactId>
                    <version>1.0.0</version>
                    <configuration>
                        <lifecycleMappingMetadata>
                            <pluginExecutions>
                                <pluginExecution>
                                    <pluginExecutionFilter>
                                        <groupId>
                                            org.apache.maven.plugins
                                        </groupId>
                                        <artifactId>
                                            maven-antrun-plugin
                                        </artifactId>
                                        <versionRange>
                                            [1.1,)
                                        </versionRange>
                                        <goals>
                                            <goal>run</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <ignore></ignore>
                                    </action>
                                </pluginExecution>
                            </pluginExecutions>
                        </lifecycleMappingMetadata>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

运行结果如下:

 三、Site生命周期

 Maven Site 插件一般用来创建新的报告文档、部署站点等。

  1. pre-site:执行一些需要在生成站点文档之前完成的工作
  2. site:生成项目的站点文档
  3. post-site: 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
  4. site-deploy:将生成的站点文档部署到特定的服务器上

这里经常用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点

我们将 maven-antrun-plugin:run 目标添加到 Site 生命周期的所有阶段中。这样我们可以显示生命周期的所有文本信息。

更新的pom.xml文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.zk.mymaven_001</groupId>
    <artifactId>mymaven_001</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mymaven_001</name>
    <build>
        <plugins>
            <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-project-info-reports-plugin</artifactId>
                 <version>2.7</version>
            </plugin>
 
     
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.1</version>
                <executions>
                    <execution>
                        <id>id.pre-site</id>
                        <phase>pre-site</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <tasks>
                                <echo>pre-site phase</echo>
                            </tasks>
                        </configuration>
                    </execution>
                    <execution>
                        <id>id.site</id>
                        <phase>site</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <tasks>
                                <echo>site phase</echo>
                            </tasks>
                        </configuration>
                    </execution>
                    <execution>
                        <id>id.post-site</id>
                        <phase>post-site</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <tasks>
                                <echo>post-site phase</echo>
                            </tasks>
                        </configuration>
                    </execution>
                    <execution>
                        <id>id.site-deploy</id>
                        <phase>site-deploy</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <tasks>
                                <echo>site-deploy phase</echo>
                            </tasks>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

 使用mvn -site执行程序,结果如下:

 

posted @   leagueandlegends  阅读(209)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示