1. 生命周期-模板方法设计模式的典型运用
Maven拥有三套相互独立的生命周期:clean,default,site;每个生命周期包含一些阶段(phase),这些阶段是有
顺序的,并且后面的阶段依赖与前面的阶段,用户和Maven 最直接的交互方式就是调用这些生命周期阶段。
(1) clean
目的是清理项目,包含三个阶段:
pre-clean:执行一些清理前需要完成的工作;
clean:清理上一次构建生成的文件;
post-clean:执行一些清理后需要完成的工作。
(2) default
目的是构建项目,定义了真正构建时所需要执行的所有步骤,有以下主要步骤:
validate;
initialize;
process-sources;
proces-sources:处理项目主资源文件。一般来说,是对src/mani/resources目录内容变量替换等工作后,复
制项目输出的主classpath目录中;
generate-resources;
process-resources;
compile:编译项目的主源码。一般来说,是编译src/main/java目录下的java文件至项目输出的主classpaht中;
process-classes ;
generate-test-sources;
process-test-sources:处理项目测试资源文件。一般来说,是对src/test/resource目录的内容进行变量替换
等工作后,复制到项目输出的classpaht目录中;
generate-test-resources;
process-test-resources;
test-compile:编译项目的测试代码。一般来说,是编译src/test/java目录下的java文件至项目输出的测试
classpath目录中;
process-test-classes;
test:使用test测试框架运行测试,测试代码不会被打包或部署;
prepare-package;
package:接受编译好的代码,打包成可发布的格式,如JAR;
pre-integration-test;
integration-test;
post-integration-test;
verify;
install:将包安装到Maven本地仓库,共本地其他Maven项目使用;
deploy:将最终的包复制到远程仓库,供其他开发人员和Maven项目使用。
(3) site
目的是建立和发布项目站点,包含下面几个阶段:
pre-site:执行一些在生成项目站点之前需要完成的工作;
site:生成项目的站点文档;
post-site:执行一些在生成项目站点之后需要完成的工作;
site-deploy:将生成的项目站点发布到服务器上。
2. 插件目标
Maven之定义了抽象的生命周期,具体的任务是交由插件完成的,而插件的功能是由插件的每一个目标来
体现的。例如:
dependency:analyze,dependency:tree,dependency:list
其中analyze,trrr,list均为maven-dependency-plugin的一个目标。
3. 插件绑定
即生命周期的阶段与插件的目标相互绑定,已完成某个具体的构建任务。
(1) 内置绑定
A. clean生命周期阶段与插件目标的绑定关系
插件目标:maven-clean-plugin:clean与生命周期pre-clean,clean,post-clean绑定。
B. site生命周期阶段与插件目标的绑定关系
插件目标:maven-site-plugin:site与生命周期:pre-site,site,post-site绑定,而maven-site-plugin:
deploy与site-deploy绑定。
C. default生命周期的内置插件绑定关系及具体任务
生命周期阶段 插件目标 执行任务
process-resources maven-resources-plugin:resources 复制主自愿文件至输出目录
compile maven-compile-plugin:compile 编译主代码至输出目录
process-test-resources maven-resources-plugin:testReources 复制测试资源文件至测试输出目录
test-compile maven-compile-plugin:testCompile 编译测试代码至测试输出目录
test maven-surefire-plugin:test 执行测试用例
package maven-jar-plugin:jar 创建项目jar包
install maven-install-plugin:install 将项目输出文件安装到本地仓库
deploy maven-deploy-plugin:deploy 将项目输出构建部署到远程仓库
(2) 自定义绑定
用户可以自定义将某个插件目标绑定之生命周期的某个阶段,下面配置在default的生命周期的verify阶段上,在
执行完集成测试后和安装构建前创建项目源码jar包:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.1</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<golas>
<gola>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
4. 插件配置
(1) 命令行插件配置
mvn install -Dmaven.test.skip=true
(2) POM中对插件进行全局配置
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compile-plugin</artifactId>
<vrsion>2.1.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
(3) POM中插件进行任务配置
5. 获取插件信息:使用maven-help-plugin
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compil-plugin:2.1.1
mvn help:describe -Dplugin=compile
mvn help:describe -Dplugin=compile -Dgoal=compile
mvn help:describe =Dplugin=compile -Ddetail
6. 插件仓库
当Maven需要的插件在本地仓库中不存在时,是不会去远程仓库中查找的,此时需要使用pluginRepositories
和pluginRepository元素进行配置。
<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>Maven Plugin Repository</name>
<url>http://repo1.maven.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<updaPolicy>never</updatePolicy>
</releases>
</pluginRepository>
</pluginRepositories>