maven笔记3--生命周期和插件

前言:

maven生命周期就是对所有的构建过程进行抽象和统一。包括:项目的清理,初始化,编译,测试,打包,集成测试,验证,部署和站点生成等。

maven的生命周期是抽象的,其实际行为都是由插件来完成,如package阶段的任务可能会由maven-jar-plugin完成。生命周期和插件协同工作。

apache插件列表:http://maven.apache.org/plugins/index.html

apache插件下载地址:http://repo1.maven.org/maven2/org/apache/maven/plugins/

生命周期

Maven为大多数构建步骤提供了默认插件。如,

编译:maven-compiler-plugin

测试:maven-surefire-plugin

Maven有三套相互独立的生命周期,分别为clean,default,和site。

  • clean     清理项目周期,分三个阶段(phase)
    1. pre-clean  执行一些清理前需要完成的工作
    2. clean        清理上一次构建生成的文件
    3. post-clean 执行一些清理后需要完成的工作
  • default   构建项目周期,最核心的部分
    1. validate
    2. initialize
    3. generate-sources
    4. process-sources      处理项目主资源文件。即对src/main/resources目录的内容进行变量替换成工作,复制到项目输出的主classpath目录中
    5. generate-resources
    6. process-resources
    7. compile                         编译项目的主源码。即编译src/main/java目录下的Java文件至项目输出的主classpath目录中
    8. process-classes
    9. generate-test-sources
    10. process-test-sources    处理项目测试资源文件。即处理src/test/resources的内容进行变量替换后,复制到项目输出的测试classpath目录中
    11. generate-test-resources
    12. process-test-resources
    13. test-compile                  编译项目测试代码。即编译src/test/java目录下的Java文件输出到测试classpath目录中
    14. process-test-classes
    15. test                                调用单元测试框架运行测试,测试代码不会被打包或部署
    16. prepare-package          
    17. package                        接受编译好的代码,打包成可发布的格式,如JAR。
    18. pre-integration-test
    19. integration-test
    20. post-integration-test
    21. verify
    22. install                          将包安装到Maven本地仓库,供本地其他Maven项目使用
    23. deploy                         将最终的包复制到远程仓库,供其他开发人员和Maven项目使用
  • site      建立和发布项目站点
    1. pre-site           执行一些在生成项目站点之前需要完成的工作
    2. site                 生成项目站点文档
    3. post-site         执行一些在生成项目站点之后需要完成的工作
    4. site-deploy     将生成的项目站点发布到服务器上

命令行与生命周期

通过执行命令去调用Maven的各个生命周期。
  • mvn  clean:执行的是clean生命周期的pre-clean和clean阶段
  • mvn  test:执行的default生命周期的1(validate)~15(test)阶段
  • mvn  install:包含两个生命周期的调用。clean生命周期的clean阶段和default生命周期的install阶段
  • mvn  clean  deploy  site-deploy:包含三个生命周期的调用。Clean生命周期的clean阶段,default的deploy阶段,site的site-deploy阶段

插件目标(Plugin Goal)

Maven的核心仅仅定义了抽象的生命周期,具体任务是交由插件完成的,插件以独立的构件形式存在。

每个插件可以做很多事情,每个功能都是一个插件目标。如:maven-dependency-plugin有十多个目标。

dependency:analyze       分析项目依赖

dependency:tree              列出项目依赖树

dependency:list                列出所有已解析的依赖

compiler:compile              maven-compiler-plugin的compile目标

surefire:test                      maven-sure-fire-plugin的test目标

插件绑定

maven的生命周期和插件相互绑定,用以完成实际的构建任务。具体就是生命周期的阶段与插件的目标相互绑定,以完成某个具体的构建任务。
maven笔记3--生命周期和插件_第1张图片
compiler插件的compile目标对应项目生命周期default周期的compile阶段。

内置绑定

为了能让用户几乎不用任何配置就能构建Maven项目,Maven核心为一些主要的生命周期阶段绑定了很多插件的目标。当用户通过命令行调用生命周期阶段的时候,对应的插件目标就会执行相应的任务。
maven笔记3--生命周期和插件_第2张图片
注意:default生命周期还有很多其他阶段,但是默认没有绑定任何插件,所以也没有任何实际行为。

自定义绑定

自定义将某个插件目标绑定到生命周期的某个阶段上
如:创建项目源码的jar包,maven-source-plugin可以帮助我们完成该任务,jar-no-fork目标能够将项目的主代码打包成jar文件,可以将其绑定到default生命周期的verify阶段上。
在执行完集成测试后和安装构件之前创建源码jar包

	
		
			
				org.apache.maven.plugins
				maven-source-plugin
				2.1.1
				
					
					
						attach-sources
						verify
						
							jar-no-fork
						
					
				
			
		
	
executions下每个execution子元素都可以用来配置执行一个任务,如上,配置了一个id为attach-source的任务,通过phase配置绑定到verify生命周期阶段上,再通过goals配置指定要执行的插件目标。

插件默认会绑定到某一个生命周期,可通过下面命令查看插件信息
help:describe -Dplugin=org.apache.maven.plugins:maven-source-plugin:2.1.1 -Ddetail

maven笔记3--生命周期和插件_第3张图片
jar-no-fork目标默认绑定到了default生命周期的package阶段
当多个目标绑定到同一个生命周期阶段时,其执行顺序由插件生命的先后顺序决定

命令行插件配置

几乎所有Maven插件的目标都有一些可配置的参数,用户可以通过命令行和POM配置等方式来配置这些参数。
在maven后添加执行参数,如:maven-surefire-plugin插件提供的参数
mvn   install  -Dmaven.test.skip=true跳过执行测试阶段
参数-D是Java自带的,功能就是通过命令行设置一个Java系统属性,Maven简单重用了该参数,在准备插件的时候检查系统属性,以此实现插件参数的配置。

Pom中插件全局配置

有些参数的值从项目创建到项目发布都不会改变,对于这种情况,在POM文件中一次性配置就显得方便很多,用户可以在声明插件的时候,对此插件进行一个全局的配置。所有基于该插件目标的任务都会使用这些配置。如,maven-compiler-plugin插件


	
		org.apache.maven.plugins
		maven-compiler-plugin
		3.2
		
			1.7
			1.7
			UTF-8
		
	
所有基于maven-compiler-plugin插件的任务,如:compile阶段的maven-compiler-plugin:compile任务;test-compiler阶段的maven-compiler-plugin:testCompiler任务,都是基于Java1.7版本进行编译的。

Pom中插件任务配置

.......

插件仓库

插件构件也是基于坐标存储在Maven仓库中,在需要的时候,Maven从本地仓库寻找插件,如果不存在就去远程仓库查找。找到插件后,再下载到本地仓库使用。
Maven内置的插件远程仓库
maven笔记3--生命周期和插件_第4张图片

settings.xml自定义配置插件到私服下载

        
           
                nexus-releases  
                 http://nexus-releases  
                 true  
                 true  
           
           
                 nexus-snapshots  
                  http://nexus-snapshots  
                true  
                true  
           
        
注意:应该一直显示设定插件的版本(即使maven超级POM中默认设置了插件的版本)

你可能感兴趣的:(maven,读书笔记,maven生命周期,maven插件)