生命周期和插件详解
纲要
1、用户自定义属性的使用
2、Maven生命周期详解
3、Maven插件详解
Maven常用命令如下:
mvn clean
mvn compile
mvn test
mvn package
mvn install
mvn install -Dmaven.test.skip=true
mvn deploy
mvn help:system
用户属性Properties的使用
pom文件中对于一些重复的代码,可以做提取,将同样的代码或者变量值,提取成方法或变量,做到重用,方便维护;例子如下:
<properties>
<spring.group>org.springframework</spring.group>
<spring.version>5.2.1.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>${spring.group}</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>${spring.group}</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>${spring.group}</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
用户可以再properties中自定义一些用户属性,然后可以在其它地方使用${属性名称}这种方式进行引用
生命周期
开发一个项目通常的流程为:
创建项目->编写代码->清理已编译代码->编译代码->执行单元测试->打包->集成测试->验证->部署->生成站点等,这些环节组成了项目的生命周期,也叫做项目的构建过程。
生命周期详解
纲要:
Maven定义了三套生命周期:
1、clean 生命周期
2、default生命周期
3、site生命周期
这三套生命周期,相互独立,无依赖关系。
但是每个生命周期中的各个阶段是有顺序之分的,并且后面的阶段依赖于前面的阶段
clean生命周期
目的:清理项目,包含三个阶段:
1、pre-clean:执行一些需要在clean之前完成的工作
2、clean:移除所有上一次构建生成的文件
3、post-clean:执行一些需要在clean之后立刻完成的工作
调用 mvn post-clean会执行上面三个阶段所有操作
default生命周期
目的:用于构建应用,包含23个阶段:
1、validate:校验:校验项目是否正确并且具备所有必要的信息,可以完成项目的构建过程
2、initialize:初始化:初始化构建状态,比如设置属性值(properties)
3、generate-sources:生成源代码:生成包含在编译阶段中的任何源代码?
4、process-sources:处理源代码:如:过滤任意值?
5、generate-resources:生成资源文件:生成将会包含在项目包中的资源文件
6、process-resources:编译:复制和处理资源到目标目录,为打包阶段做好准备
7、compile:处理类文件:编译项目的源代码
8、process-classes:处理类文件:处理编译生成的文件,比如说对Java class文件做字节码改善优化
9、generate-test-sources:生成测试源代码:生成包含在编译阶段中的任何测试源代码
10、process-test-sources:处理测试源代码:如:过滤任意值
11、generate-test-resources:生成测试源文件
12、process-test-resources:
13、test-compile:编译测试源码:编译测试源代码到测试目标目录
14、process-test-classes:处理测试类文件:处理测试源码编译生成文件
15、test:测试:使用合适的单元测试框架运行测试(Junit是其中之一)
16、prepare-package:预打包
17、package:打包:将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件
18、pre-integration-test:集成测试前:在执行集成测试前进行必要的动作,比如:搭建需要的环境
19、integeration-test:集成测试:处理和部署项目到可以运行集成测试环境中
20、post-integration-test:集成测试后:在执行集成测试完成后进行必要的动作,比如:清理集成测试环境
21、verify:验证:运行任意的检查来验证项目的包有效且达到质量标准
22、install:安装:安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖
23、deploy:部署:将最终的项目包复制到远程仓库中与其他开发者和项目共享
site生命周期
目的:建立和发布项目站点:
1、pre-site:执行一些需要在生成站点文档之前完成的工作
2、site:生成项目的站点文档
3、post-site:执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
4、site-deploy:将生成的站点文档部署到特定的服务器上
mvn命令和生命周期
执行某套生命周期中的一个命令时,会先执行该命令之前的所有命令
mvn clean运行时,会先执行mvn pre-clean,在执行clean
Maven插件
目标:maven插件以jar的方式存在于仓库中,通过坐标进行访问;插件的功能叫做插件的目标;
插件与生命周期的绑定
clean生命周期:maven-clean-plugin:clean
process-resources maven-resources-plugin:resources 复制主资源文件至主输出目录
compile maven-compiler-plugin:compile 编译主代码至主输出目录
process-test-resources maven-resources-plugin:testResources 复制测试资源文件至测试输出目录
test-compile maven-compiler-plugin:testCompile 编译测试代码至测试输出目录
test maven-surefile-plugin:test 执行测试用例
package maven-jar-plugin:jar 创建项目jar包
install maven-install-plugin:install 将输出构件安装到本地仓库
deploy maven-deploy-plugin:deploy 将输出的构件部署到远程仓库
site maven-site-plugin:site
site-deploy maven-site-plugin:deploy
自定义绑定
可以将一些阶段绑定到指定的插件目标上来完成一些操作,这种自定义的绑定可以让maven项目在构建过程中执行更多丰富的操作
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.0</version>
<executions>
<!-- 使用插件需要执行的任务 -->
<execution>
<!-- 任务id -->
<id>attach-source</id>
<!-- 任务中插件的目标,可以指定多个 -->
<goals>
<goal>jar-no-fork</goal>
</goals>
<!-- 绑定的阶段 -->
<phase>verify</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
注意上面配置的attach-source,后面输出中会有。
id:任务的id,需唯一,如果不指定,默认为default。
每个插件的配置在pom.xml的plugins元素中只能写一次,否则会有警告。