首页 > 代码库 > maven生命周期

maven生命周期

一、依赖生命周期

scope:依赖的生命周期—用来控制项目编译时需要使用哪套classpath,比如测试时会将junit.jar加入编译环境,但是发布产品时又不会将junit.jar加入到编译环境

•compile:编译依赖范围。如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译、测试、运行三种classpath都有效。典型的例子就是spring-core,在编译、测试、运行的时候都需要该依赖。
•test:测试依赖范围。该依赖只对于测试classpath有效,在编译主代码或者运行项目时,此依赖无效。典型的例子就是Junit,它只有在编译测试代码及运行测试的时候才需要。
•provided:已提供的依赖范围。该依赖对于编译和测试classpath有效,但在运行时无效。典型的例子就是servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要在maven重复的引入一遍。
•runtime:运行时依赖范围。该依赖对于测试和运行classpath有效,但在编译主代码时无效。典型的例子是JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动。
•system:系统范围依赖。该依赖与provided依赖范围完全一致。但是使用system范围的依赖时必须通过systemPath温宿显示指定依赖文件的路径。由于此类依赖不是通过Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此应该谨慎使用该依赖
---------------------------------------------------------------------------------------------

 

二、构建的生命周期

Maven有用三套相互独立的生命周期,他们分别是clean、default、site。

clean生命周期的目的是清理项目
default生命周期的目的是构建项目

site生命周期的目的是建立项目站点

每个生命周期都包含一些阶段(phase),这些阶段是有序执行的,并且后面的阶段依赖于前面的阶段,用户和maven最直接的交互方式就是调用这些生命周期阶段。

-------------------------------------------------------------------------------------------------

clean生命周期

clean生命周期包含三个阶段:
1)pre-clean:执行一些清理前需要完成的工作
2)clean:清理上一次构建生成的文件
3)post-clean:执行一些清理后需要完成的工作
我们一般使用clean命令即可

 

              default生命周期  

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文件至项目输出的主class目录中
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项目使用
注:未说明的大家可以参考官网的解释
我们一般使用的几个命令:compile、test、package、install、deploy

 

site生命周期

site生命周期的目的是建立和发布项目站点,maven能够基于pom所包含的信息,自动生成一个侯浩的站点,方便团队交流和发布项目信息。该生命周期包含如下阶段:
1)pre-site执行一些在生成项目站点之前需要完成的工作
2)site生成项目站点文档
3)post-site执行一些在生成项目站点后需要完成的工作
4)site-deploy将生成的项目站点发布到服务器上

 命令行与生命周期

从命令行执行maven任务的最主要方式就是调用maven的生命周期阶段。需要注意的是,各个生命周期是相互独立的,而一个生命周期的二阶段是有前后依赖关系的,也就是说后一个生命的执行,那么前面的生命周期必须也要执行。
1)clean:该命令调用clean生命周期的clean阶段。实际执行的生命周期是pre-clean和clean阶段
2)test:该命令调用default生命周期的test阶段。实际执行的阶段为validate、initialize等,知道test的所有阶段。这也解释了为什么在测试的时候,项目的代码能够自动的得以编译。
3)clean install:该命令调用clean生命周期的clean阶段和default生命周期的install阶段。实际执行的阶段为clean生命周期的pre-clean、clean阶段,以及default生命周期的从validate至install的所有阶段。该命令结合了两个生命周期,在执行真正的项目构建之前清理项目时一个很好的建议。
4)clean deploy site-deploy:该命令调用clean生命周期的clean阶段、default生命周期的deploy阶段,已经site生命周期的site-deploy阶段

maven生命周期