Chapter 10. 构建生命周期
10.1.1. 清理生命周期 (clean)
运行mvn clean将调用清理生命周期,它包含了三个生命周期阶段:
-
pre-clean
-
clean
-
post-clean
在每个生命周期阶段,你如果需要执行自己的任务或者通知可以使用插件maven-antrun-plugin
你也可以通过插件配置,改变原有生命周期阶段的任务例如
Example 10.2. 自定义Clean插件的行为
<project> <modelVersion>4.0.0</modelVersion> ... <build> <plugins> <plugin> <artifactId>maven-clean-plugin</artifactId> <configuration> <filesets> <fileset> <directory>target-other</directory> <includes> <include>*.class</include> </includes> </fileset> </filesets> </configuration> </plugin> </plugins> </build> </project>
10.1.2. 默认生命周期 (default)
生命周期阶段 | 描述 |
---|---|
validate | 验证项目是否正确,以及所有为了完整构建必要的信息是否可用 |
generate-sources | 生成所有需要包含在编译过程中的源代码 |
process-sources | 处理源代码,比如过滤一些值 |
generate-resources | 生成所有需要包含在打包过程中的资源文件 |
process-resources | 复制并处理资源文件至目标目录,准备打包 |
compile | 编译项目的源代码 |
process-classes | 后处理编译生成的文件,例如对Java类进行字节码增强(bytecode enhancement) |
generate-test-sources | 生成所有包含在测试编译过程中的测试源码 |
process-test-sources | 处理测试源码,比如过滤一些值 |
generate-test-resources | 生成测试需要的资源文件 |
process-test-resources | 复制并处理测试资源文件至测试目标目录 |
test-compile | 编译测试源码至测试目标目录 |
test | 使用合适的单元测试框架运行测试。这些测试应该不需要代码被打包或发布 |
prepare-package | 在真正的打包之前,执行一些准备打包必要的操作。这通常会产生一个包的展开的处理过的版本(将会在Maven 2.1+中实现) |
package | 将编译好的代码打包成可分发的格式,如JAR,WAR,或者EAR |
pre-integration-test | 执行一些在集成测试运行之前需要的动作。如建立集成测试需要的环境 |
integration-test | 如果有必要的话,处理包并发布至集成测试可以运行的环境 |
post-integration-test | 执行一些在集成测试运行之后需要的动作。如清理集成测试环境。 |
verify | 执行所有检查,验证包是有效的,符合质量规范 |
install | 安装包至本地仓库,以备本地的其它项目作为依赖使用 |
deploy | 复制最终的包至远程仓库,共享给其它开发人员和项目(通常和一次正式的发布相关) |
10.1.3. 站点生命周期 (site)
Maven不仅仅能从一个项目构建软件构件,它还能为一个或者一组项目生成项目文档和报告。项目文档和站点生成有一个专有的生命周期,它包含了四个阶段:
-
pre-site
-
site
-
post-site
-
site-deploy
mvn site
10.2. 打包相关生命周期
绑定到每个阶段的特定目标默认根据项目的打包类型设置。一个打包类型为jar
的项目和一个打包类型为war
的项目拥有不同的两组默认目标。
常用的打包类型,jar,pom,manven-plugin,EJB,WAR,EAR.也可以使用插件支持其他项目的打包,例如swf
10.3. 通用生命周期目标
Chapter 11. 构建Profile
11.1. Profile是用来做什么的?
Profile能让你为一个特殊的环境自定义一个特殊的构建;profile使得不同环境间构建的可移植性成为可能。
构建可移植性!!!!!!!!!
一个构建的“可移植性”是指将一个项目在不同的环境中构建的难易度。
11.1.1.2. 环境可移植性!!!!
一个profile 几乎可以覆盖项目模型的所有内容
<project> <profiles> <profile> <build> <defaultGoal>...</defaultGoal> <finalName>...</finalName> <resources>...</resources> <testResources>...</testResources> <plugins>...</plugins> </build> <reporting>...</reporting> <modules>...</modules> <dependencies>...</dependencies> <dependencyManagement>...</dependencyManagement> <distributionManagement>...</distributionManagement> <repositories>...</repositories> <pluginRepositories>...</pluginRepositories> <properties>...</properties> </profile> </profiles> </project>