Maven笔记6-Maven生命周期和插件
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>