欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Maven中的几个重要概念:lifecycle, phase 和 goal

程序员文章站 2022-04-30 09:33:10
...

Maven中的几个重要概念:lifecycle, phase 和 goal

 

 

当我们对一个项目进行打包时,maven分别执行了

验证(validate) ==> 编译源码(compile) ==> 编译测试源码(test-compile) ==> 单元测试(test) ==> 打包(package)

这个过程就是生命周期(lifecycle)。在生命周期的过程中会有很多的阶段(phase),这些阶段按照既定的顺序执行来完成一个项目的构建。

 

在生命周期中,各个阶段的工作由插件来完成(plugin),一个插件通常可以完成一个或者多个阶段的工作。每个阶段的工作对应插件中的一个目标(goal)。不同的插件结合起来,就完成了整个项目的构建。

 

maven的生命周期可以分为三大类

 

1.Clean Lifecycle :在进行真正的构建之前进行一些清理工作

 

Maven中的几个重要概念:lifecycle, phase 和 goal

 

 

pre-clean 执行一些需要在clean之前完成的工作

clean 移除所有上一次构建生成的文件

post-clean 执行一些需要在clean之后立刻完成的工作

2.Site Lifecycle :生成项目报告,站点,发布站点

 

Maven中的几个重要概念:lifecycle, phase 和 goal

 

 

pre-site 执行一些需要在生成站点文档之前完成的工作

site 生成项目的站点文档

post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备

site-deploy 将生成的站点文档部署到特定的服务器上

然后看,最常用,最重要的,名字却不起眼的

3.Default Lifecycle : 构建的核心部分,编译,测试,打包,部署等等

 

Maven中的几个重要概念:lifecycle, phase 和 goal

 

 

validate 验证工程是否正确,所需的信息是否完整

initialize 初始化构建平台,例如:设置properties或创建目录

generate-sources

process-sources

generate-resources

process-resources 复制并处理资源文件,至目标目录,准备打包

compile 编译源代码

process-classes 源码编译后的后期处理,比如java字节码的增强(优化?)

generate-test-sources

process-test-sources

generate-test-resources

process-test-resources

test-compile 编译测试源代码(默认是test目录下)

process-test-class

test 执行单元测试

prepare-package

package 将工程文件打包为指定的格式,例如JAR,WAR等

pre-integration-test

integration-test 集成测试

post-integration-test

verify 检查package是否有效、符合标准

install 将包安装至本地仓库,以让其它项目依赖。

deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享。

 

上面是对生命周期及生命周期对应的阶段的介绍。下面说明下插件中目标(goal)的查询方式

 mvn help:describe -Dplugin=org.apache.maven.plugins:maven-eclipse-plugin:2.10

 

下面是一个使用了phase和goal的小例子

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <executions>
                    <execution>
                        <!-- 绑定到编译的生命周期 -->
                        <phase>compile</phase>
                        <goals>
                            <!-- 执行目标java -->
                            <goal>java</goal>
                        </goals>
                        <configuration>
                            <mainClass>x.x.x.HelloWord</mainClass>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

这个配置会在编译时执行HelloWord类的man方法。

https://dwz.cn/VcdZbQeB