Maven 构建生命周期

什么是构建生命周期?

Maven 构建生命周期是一组有序的阶段(phases),定义了项目构建和分发的过程。每个生命周期由多个阶段组成,每个阶段代表构建过程中的一个特定步骤。

Maven 三大生命周期

Default Lifecycle(默认生命周期)

这是最重要的生命周期,包含了项目构建的主要阶段:

validate

验证项目结构和必要信息

compile

编译源代码

test

运行单元测试

package

打包编译后的代码

verify

验证包的有效性

install

安装到本地仓库

deploy

部署到远程仓库

Default Lifecycle 完整阶段

阶段 描述 常用命令
validate 验证项目是否正确,所有必要信息是否可用 mvn validate
initialize 初始化构建状态 -
generate-sources 生成源代码 -
process-sources 处理源代码 -
generate-resources 生成资源文件 -
process-resources 处理资源文件到目标目录 -
compile 编译项目源代码 mvn compile
process-classes 处理编译生成的文件 -
generate-test-sources 生成测试源代码 -
process-test-sources 处理测试源代码 -
generate-test-resources 生成测试资源 -
process-test-resources 处理测试资源到目标目录 -
test-compile 编译测试源代码 mvn test-compile
process-test-classes 处理测试编译生成的文件 -
test 运行单元测试 mvn test
prepare-package 准备打包 -
package 打包编译后的代码 mvn package
pre-integration-test 集成测试前准备 -
integration-test 运行集成测试 mvn integration-test
post-integration-test 集成测试后处理 -
verify 验证包是否有效且符合质量标准 mvn verify
install 安装包到本地仓库 mvn install
deploy 部署到远程仓库 mvn deploy

Clean Lifecycle(清理生命周期)

用于清理项目构建产生的文件:

阶段 描述 命令
pre-clean 清理前的准备工作 -
clean 清理构建生成的文件 mvn clean
post-clean 清理后的收尾工作 -
$ mvn clean [INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ my-project --- [INFO] Deleting target directory

Site Lifecycle(站点生命周期)

用于生成项目文档和站点:

阶段 描述 命令
pre-site 生成站点前的准备工作 -
site 生成项目站点文档 mvn site
post-site 生成站点后的收尾工作 -
site-deploy 部署站点到服务器 mvn site-deploy

常用命令示例

基本构建命令

# 编译项目 $ mvn compile # 运行测试 $ mvn test # 打包项目 $ mvn package # 安装到本地仓库 $ mvn install # 清理并重新构建 $ mvn clean install

跳过测试

# 跳过测试编译和执行 $ mvn install -DskipTests # 跳过测试编译 $ mvn install -Dmaven.test.skip=true

指定配置文件

# 使用特定的 Profile $ mvn install -Pproduction # 使用特定的 settings.xml $ mvn install -s /path/to/settings.xml

生命周期执行流程

validate
compile
test
package
install
重要:当执行某个阶段时,Maven 会自动执行该阶段之前的所有阶段。例如,执行 mvn package 会依次执行 validate、compile、test、package 阶段。

插件和目标(Goals)

每个生命周期阶段都会绑定一个或多个插件目标:

# 执行特定插件的特定目标
mvn plugin:goal

# 示例:编译源代码
mvn compiler:compile

# 示例:运行测试
mvn surefire:test

# 示例:创建 JAR 文件
mvn jar:jar

默认插件绑定

阶段 插件:目标 描述
process-resources resources:resources 复制资源文件
compile compiler:compile 编译源代码
process-test-resources resources:testResources 复制测试资源文件
test-compile compiler:testCompile 编译测试代码
test surefire:test 运行单元测试
package jar:jar 创建 JAR 包
install install:install 安装到本地仓库
deploy deploy:deploy 部署到远程仓库

自定义生命周期绑定

可以在 POM 中自定义插件绑定到特定阶段:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
                <execution>
                    <phase>validate</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <target>
                            <echo message="开始构建项目..." />
                        </target>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

最佳实践