一、maven 生命周期
(一)简介
Maven强大的一个重要的原因是它有一个十分完善的生命周期模型(lifecycle),这个生命周期可以从两方面来理解:
1、顾名思义,运行Maven的每个步骤都由它来定义的,这种预定义的默认行为使得我们使用Maven变得简单,相比而言,Ant的每个步骤都要你手工去定义。
2、这个模型是一种标准,在不同的项目中,使用Maven的接口是一样的,这样就不用去仔细理解每个项目的构建了,一般情况下,mvn clean install 这样的命令是通用的。
3、一个Maven 的生命周期,可以分为若干个阶段。如 Clean 生命周期,就有3个阶段。
(二)生命周期的类型
1、Maven有三套相互独立的生命周期,这三套生命周期分别是:
2、它们是相互独立的,你可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点。当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。
3、每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比如,运行mvn clean ,这个的clean 是 Clean 生命周期的一个阶段。这个很重要。
4、阶段运行规则:在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行,也就是说,mvn clean 等同于 mvn pre-clean clean ,如果我们运行 mvn post-clean ,那么 pre-clean,clean 都会被运行。这是Maven很重要的一个规则,可以大大简化命令行的输入。
(三)Clean 生命周期
1、Clean生命周期一共包含了三个阶段:
2、mvn clean 中的clean就是上面的clean阶段。
(四)Site 生命周期
Site生命周期的各个阶段
(五)Default 生命周期(最重要)
1、各个阶段:
基本上,根据名称我们就能猜出每个阶段的用途。
(六)插件与生命周期
1、生命周期以及各个阶段,是通过插件的运行而实现的。
2、插件的目标可以捆绑生命周期的阶段。如maven-clean-plugin插件的 clean 目标绑定了Clean 生命周期的 clean 阶段。这样命令行输入 mvn clean 命令,先定位到clean 阶段 ,然后执行 maven-clean-plugin插件中的 clean 目标。插件保存在仓库中:%仓库目录%\repository\org\apache\maven\plugins\ 。
二、maven 插件
(一)插件基础
1、插件目标
1)我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的。
2)每个任务对应了一个插件目标(goal),每个插件会有一个或者多个目标,例如maven- compiler-plugin 的 compile 目标用来编译位于src/main/java/目录下的主源码,testCompile 目标用来编译位于src/test/java/目录下的测试源码。
2、可以通过两种方式调用Maven插件目标。
1)将插件目标与生命周期阶段(lifecycle phase)绑定(内置绑定与自定义绑定)。这样用户在命令行只是输入生命周期阶段而已,例如 Maven默认将 maven-compiler-plugin 的 compile 目标与 compile 生命周期阶段绑定,因此命令mvn compile实际上是先定位到 compile 这一生命周期阶段,然后再根据绑定关系调用 maven-compiler-plugin 的 compile 目标。
2)直接在命令行指定要执行的插件目标,例如mvn archetype:generate 就表示调用maven-archetype-plugin的 generate目标,这种带冒号的调用方式与生命周期无关。
3、Maven官方有两个插件列表:
1)GroupId为 org.apache.maven.plugins,这里的插件最为成熟,具体地址为:http://maven.apache.org/plugins/index.html。
2)GroupId为 org.codehaus.mojo,这里的插件没有那么核心,但也有不少十分有用,其地址为:http://mojo.codehaus.org/plugins.html。
(二)插件应用
1、maven-source-plugin 创建项目源码
1)插件目标与阶段的自定义绑定
<!-- 源码编译插件,实现自定义绑定 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.1.1</version> <executions> <execution><!-- 配置一个任务 --> <id>attach-sources</id><!-- 任务id --> <phase>verify</phase><!-- 生命周期的阶段 --> <goals> <goal>jar-no-fork</goal><!-- 阶段绑定的目标 --> </goals> </execution> </executions> </plugin>
2)插件目标与阶段的内置绑定。(不通过 phase 元素配置生命周期阶段,插件目标也可以绑定到生命周期中)
①、删除上面 <phase>verify</phase> 这一行配置,再次执行 mvn verify 命令仍然可以看到插件执行。
②、命令行:mvn help:describe -Dplugin=org.apache.maven.plugins:maven-source-plugin:2.1.1 -Ddetail 查看插件详细信息,了解插件目标的内置绑定阶段。
③、maven-help-plugin 插件,查看其它插件的详细信息。mvn help:describe -Dplugin = source -Ddetail 可以简化命令。
2、maven-compiler-plugin 设定编译的JDK版本
1)配置插件目标的参数,-D 增加参数。
2)pom文件配置全局参数。
<!-- compiler插件, 设定JDK版本 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.6</source> <target>1.6</target> <encoding>${project.charset}</encoding> <showWarnings>true</showWarnings> </configuration> </plugin>
<plugin> <artifactId>maven-antrun-plugin</artifactId> <version>1.7</version> <executions> <execution> <id>upload-war-to-uat-server</id> <phase>install</phase> <configuration> <tasks> <ant antfile="${basedir}/bin/${project.install.phase}-ant.xml"> <target name="deploy" /> </ant> </tasks> </configuration> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin>
3、tomcat-maven-plugin tomcat插件,maven与tomcat的结合(maven项目在toncat中运行)。
1)配置
<!-- tomcat的插件 --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>tomcat-maven-plugin</artifactId> <version>1.1</version> <configuration> <path>/${project.build.target.file.name}</path> </configuration> </plugin>
2)运行:tomcat:run 或者 tomcat:run -Dmaven.tomcat.port=8880 指定端口。
3、插件介绍
原文地址:http://blog.csdn.net/u012228718/article/details/42340213