What are the phases of the maven default lifecycle?
来源:互联网 发布:淘宝珍本医书集成 编辑:程序博客网 时间:2024/05/16 04:40
validate
package
等都是phase,每个phase必须绑定一个goal,否则不会执行
goal是插件的一个功能,真正做事情的是插件的功能,即goal
,所以phase中必须绑定goal
,否则这个phase都没有具体功能了。多个phase可以组成一个lifecycle。
The phases of the default (build) maven lifecycle are listed at http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle. I have listed them again here:
Maven Default Lifecycle Phases
- validate
- generate-sources
- process-sources
- generate-resources
- process-resources
- compile
- process-classes
- generate-test-sources
- process-test-sources
- generate-test-resources
- process-test-resources
- test-compile
- test
- prepare-package (maven 2.1+)
- package
- pre-integration-test
- integration-test
- post-integration-test
- verify
- install
- deploy
Notice that there are actually 21 phases of the default lifecycle listed. The “prepare-package” phase, however, won’t be used until maven 2.1+. Since I am running 2.0.8 (the latest version at the time of this writing), this phase is not available to me.
There are a couple key concepts to be aware of with maven lifecycles. First off, if we call a particular phase via a maven command, such as “mvn compile
“, all phases up to and including that phase will be executed. So, in the case of “mvn compile
“, we would actually go through the validate
, generate-sources
, process-sources
, generate-resources
, process-resources
, and compile
phases. The second main concept to be aware of in regards to lifecycles is that, based on the packaging of a project (jar, war, ear, etc), different maven goals will be bound to different phases of the maven lifecycle.
Let’s demonstrate the phases of the maven default lifecycle. One way to do this is to bind the antrun:run
goal to the various phases of the maven default lifecycle, and to output a message using the Ant echo task. Here, I created a pom.xml file that will output a message for each phase of the default lifecycle.
pom.xml file that binds antrun:run
to default lifecycle phases
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.maventest</groupId> <artifactId>aproject</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <name>aproject</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</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>in validate phase (1 of 21)</echo> </tasks> </configuration> </execution> <execution> <id>id.generate-sources</id> <phase>generate-sources</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>in generate-sources phase (2 of 21)</echo> </tasks> </configuration> </execution> <execution> <id>id.process-sources</id> <phase>process-sources</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>in process-sources phase (3 of 21)</echo> </tasks> </configuration> </execution> <execution> <id>id.generate-resources</id> <phase>generate-resources</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>in generate-resources phase (4 of 21)</echo> </tasks> </configuration> </execution> <execution> <id>id.process-resources</id> <phase>process-resources</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>in process-resources phase (5 of 21)</echo> </tasks> </configuration> </execution> <execution> <id>id.compile</id> <phase>compile</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>in compile phase (6 of 21)</echo> </tasks> </configuration> </execution> <execution> <id>id.process-classes</id> <phase>process-classes</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>in process-classes phase (7 of 21)</echo> </tasks> </configuration> </execution> <execution> <id>id.generate-test-sources</id> <phase>generate-test-sources</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>in generate-test-sources phase (8 of 21)</echo> </tasks> </configuration> </execution> <execution> <id>id.process-test-sources</id> <phase>process-test-sources</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>in process-test-sources phase (9 of 21)</echo> </tasks> </configuration> </execution> <execution> <id>id.generate-test-resources</id> <phase>generate-test-resources</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>in generate-test-resources phase (10 of 21)</echo> </tasks> </configuration> </execution> <execution> <id>id.process-test-resources</id> <phase>process-test-resources</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>in process-test-resources phase (11 of 21)</echo> </tasks> </configuration> </execution> <execution> <id>id.test-compile</id> <phase>test-compile</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>in test-compile phase (12 of 21)</echo> </tasks> </configuration> </execution> <execution> <id>id.test</id> <phase>test</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>in test phase (13 of 21)</echo> </tasks> </configuration> </execution> <execution> <id>id.prepare-package</id> <phase>prepare-package</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>in prepare-package phase (14 of 21)</echo> </tasks> </configuration> </execution> <execution> <id>id.package</id> <phase>package</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>in package phase (15 of 21)</echo> </tasks> </configuration> </execution> <execution> <id>id.pre-integration-test</id> <phase>pre-integration-test</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>in pre-integration-test phase (16 of 21)</echo> </tasks> </configuration> </execution> <execution> <id>id.integration-test</id> <phase>integration-test</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>in integration-test phase (17 of 21)</echo> </tasks> </configuration> </execution> <execution> <id>id.post-integration-test</id> <phase>post-integration-test</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>in post-integration-test phase (18 of 21)</echo> </tasks> </configuration> </execution> <execution> <id>id.verify</id> <phase>verify</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>in verify phase (19 of 21)</echo> </tasks> </configuration> </execution> <execution> <id>id.install</id> <phase>install</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>in install phase (20 of 21)</echo> </tasks> </configuration> </execution> <execution> <id>id.deploy</id> <phase>deploy</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>in deploy phase (21 of 21)</echo> </tasks> </configuration> </execution> </executions> </plugin> </plugins> <extensions> <!-- begin - needed for deploying to repository using webdav --> <extension> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-webdav</artifactId> <version>1.0-beta-2</version> </extension> <!-- end - needed for deploying to repository using webdav --> </extensions> </build> <distributionManagement> <repository> <id>archiva.internal</id> <name>Internal Release Repository</name> <url>dav:http://192.168.1.7:8081/archiva/repository/internal</url> </repository> <snapshotRepository> <id>archiva.snapshots</id> <name>Internal Snapshot Repository</name> <url>dav:http://192.168.1.7:8081/archiva/repository/snapshots</url> </snapshotRepository> </distributionManagement></project>
Now, let’s try a “mvn deploy
” on the project containing the above pom.xml
file. The deploy phase is the last phase of the default lifecycle. Since it is the last phase, all phases of the lifecycle will be executed.
Console output from ‘mvn deploy’
[INFO] Scanning for projects...WAGON_VERSION: 1.0-beta-2[INFO] ------------------------------------------------------------------------[INFO] Building aproject[INFO] task-segment: [deploy][INFO] ------------------------------------------------------------------------[INFO] [antrun:run {execution: id.validate}][INFO] Executing tasks [echo] in validate phase (1 of 21)[INFO] Executed tasks[INFO] [antrun:run {execution: id.generate-sources}][INFO] Executing tasks [echo] in generate-sources phase (2 of 21)[INFO] Executed tasks[INFO] [antrun:run {execution: id.process-sources}][INFO] Executing tasks [echo] in process-sources phase (3 of 21)[INFO] Executed tasks[INFO] [antrun:run {execution: id.generate-resources}][INFO] Executing tasks [echo] in generate-resources phase (4 of 21)[INFO] Executed tasks[INFO] [antrun:run {execution: id.process-resources}][INFO] Executing tasks [echo] in process-resources phase (5 of 21)[INFO] Executed tasks[INFO] [antrun:run {execution: id.compile}][INFO] Executing tasks [echo] in compile phase (6 of 21)[INFO] Executed tasks[INFO] [antrun:run {execution: id.process-classes}][INFO] Executing tasks [echo] in process-classes phase (7 of 21)[INFO] Executed tasks[INFO] [antrun:run {execution: id.generate-test-sources}][INFO] Executing tasks [echo] in generate-test-sources phase (8 of 21)[INFO] Executed tasks[INFO] [antrun:run {execution: id.process-test-sources}][INFO] Executing tasks [echo] in process-test-sources phase (9 of 21)[INFO] Executed tasks[INFO] [antrun:run {execution: id.generate-test-resources}][INFO] Executing tasks [echo] in generate-test-resources phase (10 of 21)[INFO] Executed tasks[INFO] [antrun:run {execution: id.process-test-resources}][INFO] Executing tasks [echo] in process-test-resources phase (11 of 21)[INFO] Executed tasks[INFO] [antrun:run {execution: id.test-compile}][INFO] Executing tasks [echo] in test-compile phase (12 of 21)[INFO] Executed tasks[INFO] [antrun:run {execution: id.test}][INFO] Executing tasks [echo] in test phase (13 of 21)[INFO] Executed tasks[INFO] [site:attach-descriptor][INFO] [antrun:run {execution: id.package}][INFO] Executing tasks [echo] in package phase (15 of 21)[INFO] Executed tasks[INFO] [antrun:run {execution: id.pre-integration-test}][INFO] Executing tasks [echo] in pre-integration-test phase (16 of 21)[INFO] Executed tasks[INFO] [antrun:run {execution: id.integration-test}][INFO] Executing tasks [echo] in integration-test phase (17 of 21)[INFO] Executed tasks[INFO] [antrun:run {execution: id.post-integration-test}][INFO] Executing tasks [echo] in post-integration-test phase (18 of 21)[INFO] Executed tasks[INFO] [antrun:run {execution: id.verify}][INFO] Executing tasks [echo] in verify phase (19 of 21)[INFO] Executed tasks[INFO] [install:install][INFO] Installing C:\dev\workspace\aproject\pom.xml to \dev\m2repo\com\maventest\aproject\1.0-SNAPSHOT\aproject-1.0-SNAPSHOT.pom[INFO] [antrun:run {execution: id.install}][INFO] Executing tasks [echo] in install phase (20 of 21)[INFO] Executed tasks[INFO] [deploy:deploy]altDeploymentRepository = null[INFO] Retrieving previous build number from archiva.snapshotsUploading: http://192.168.1.7:8081/archiva/repository/snapshots/com/maventest/aproject/1.0-SNAPSHOT/aproject-1.0-20080213.235441-1.pom4096/?7950/?[INFO] Retrieving previous metadata from archiva.snapshots[INFO] Uploading repository metadata for: 'snapshot com.maventest:aproject:1.0-SNAPSHOT'[INFO] Retrieving previous metadata from archiva.snapshots[INFO] Uploading repository metadata for: 'artifact com.maventest:aproject'[INFO] [antrun:run {execution: id.deploy}][INFO] Executing tasks [echo] in deploy phase (21 of 21)[INFO] Executed tasks[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESSFUL[INFO] ------------------------------------------------------------------------[INFO] Total time: 5 seconds[INFO] Finished at: Wed Feb 13 15:54:42 PST 2008[INFO] Final Memory: 8M/15M[INFO] ------------------------------------------------------------------------
From the output, notice that all phases of the lifecycle are executed. Notice that the “prepare-package” phase (14 of 21) does not occur since I’m not using maven 2.1 (since it hasn’t been released at the time of this writing).
- What are the phases of the maven default lifecycle?
- What are the phases of the maven default lifecycle?
- Agile default lifecycle phases
- What events are fired as part of the ASP.NET System.Web.UI.Page lifecycle?
- What Are the Default HotSpot JVM Values
- Understanding the Request Processing Lifecycle Phases
- The Unspoken - Phases of CMS
- What is the purpose of /etc/default?
- What are the Types of Inforecords
- what are the semantics of a const member function
- What are the different kinds of parsers used in XML?
- What are the Three Layers of Web Development?
- What are the benefits of PreparedStatement over Statement
- FAT file system-What are the two reserved clusters at the start of the FAT for?
- What are the meaning of the items in the “alignment trap” error message?
- Maven: Build lifecycle and Phases and Goals
- 查询优化的具体步骤(The Phases of Query Optimization)
- maven default lifecycle
- 左移和右移计算
- codeforces #303A Lucky Permutation Triple 构造
- iOS label自适应
- 第十一周项目0——是春哥啊
- 两端入栈
- What are the phases of the maven default lifecycle?
- SQL语句中exists/not exists的用法分析
- 自定义程序入口的相关问题
- webStorm使用
- 十一周项目四 类族的设计(1)
- SpringMVC-04 使用Servlet原生的API作为参数
- sqlsever2008 R2 导出sqlsever2000 脚本
- Android Application的作用
- 第5章第1题