常用命令
mvn clean 清理项目
mvn compile 编译源代码
mvn test 运行测试
mvn test-compile 编译测试代码
mvn package 打包
mvn install 将包上传到本地仓库
mvn deploy 上传私服
生命周期
Maven的生命周期就是为了对所有的构建过程进行抽象统一,包括:项目清理、初始化、编译、测试、打包、集成测试、验证、部署、站点生成等几乎所有的构建步骤。Maven生命周期是抽象的,这些步骤的实际任务都是由插件来完成
三套生命周期
Maven拥有三套相互独立的生命周期:clean(清理项目)、default(构建项目)、site(建立项目站点)。用户可以江景调用某个生命周期的某个阶段,不会对其他生命周期产生影响。Maven生命周期的阶段与插件目标相互绑定,以完成具体构建任务。对于插件本身,为了能复用代码,往往能完成多个任务,每个任务就是一个插件目标。如maven-dependency-plugin有十多个目标,每个目标对应一个功能:dependency:analyze——分析项目依赖,找出潜在无用依赖;dependency:tree——列出项目依赖书,dependency:list——列出项目所有已解析依赖。
内置绑定
为了让用户几乎不用任何配置就能构建Maven项目,Maven在核心为一些主要生命周期阶段绑定了插件目标
clean生命周期阶段与插件目标的绑定关系
生命周期阶段 | 插件目标 | 阶段工作 | 执行任务 |
---|---|---|---|
pre-clean | - | 清理钱需要完成的工作 | - |
clean | maven-clean-plugin:clean | 清理上一次构建生成的文件 | 清理上一次构建生成的文件 |
post-clean | - | 清理后需要完成的工作 | - |
default生命周期阶段与插件目标的绑定关系
生命周期阶段 | 插件目标 | 阶段目标 | 执行任务 |
---|---|---|---|
validate | - | ||
initialize | - | ||
generate-sources | - | ||
process-sources | - | 处理主资源文件,对src/main/resources下的内容复制到输出主classpath目录中 | |
genrate-resources | - | ||
process-resources | maven-resources-plugin:resources | 复制主资源文件到主输出目录 | |
compile | maven-compiler-plugin:compile | 编译主源码,对src/main/java下的文件输出主classpat目录中 | 编译主代码到主输出目录 |
process-classes | - | ||
generate-test-sources | - | ||
process-test-sources | maven-resources-plugin:testResources | 处理项目测试资源文件,对对src/test/resources下的内容复制到输出测试classpath目录中 | 复制测试资源文件到测试输出目录 |
generate-test-resources | - | ||
process-test-resources | - | ||
test-compile | maven-compiler-plugin:testCompile | 编译项目测试代码 | 编译测试代码到测试输出目录 |
process-test-classes | - | ||
test | maven-surefire-plugin:test | 使用单元测试框架运行测试,测试代码不会被打包或部署 | 执行测试用例 |
prepare-package | - | ||
package | maven-jar-plugin:jar | 接受编译好的代码,打成可发布的格式(如jar) | 打jar包 |
pre-integraton-test | - | ||
integration-test | - | ||
post-integration-test | - | 将项目输出安装到本地仓库 | |
verify | maven-install-plugin:install | ||
install | - | 将包安装到本地仓库 | 将项目输出部署到远程仓库 |
deploy | maven-deploy-plugin:deploy | 将包复制到远程仓库 | |
site生命周期阶段与插件目标的绑定关系
生命周期阶段 | 插件目标 | 阶段目标 | 执行任务 |
---|---|---|---|
pre-site | - | 在生成站点之前需要完成的功能做 | |
site | maven-site-plugin:site | 生成站点文档 | |
post-site | - | 生成站点时候需要完成的工作 | |
site-deploy | maven-site-plugin:deploy | 将站点发布到服务器上 |
自定义绑定
处理内置绑定用户还能自己选择将某个插件目标绑定到生命周期的某个阶段上。executions下每个execution子元素可以用来配置执行一个任务,通过phase绑定生命周期阶段,通过goal指定插件目标。当多个插件目标绑定到同一个阶段时,目标的执行顺序由插件的声明顺序决定。
org.apache.maven.plugins maven-source-plugin 3.0.0 attach-sources verify jar-no-fork
插件配置
命令行配置
Maven命令中使用-D参数,伴随参数键=参数值得形式,如mvn install -Dmaven.test.skip=true
POM全局配置
使用configuration元素设置参数值
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
插件查询
在线
Maven 官方插件
https://maven.apache.org/plugins/index.html
CodeHaus 插件
http://www.mojohaus.org/plugins.html
maven-help-plugin
maven-help-plugin
mvn help:describe -Dplugin=groupId:artifactId:version -D参数,如:
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-source-plugin:3.0.0 -Ddetail -Dgoal=jar-no-fork(其中-Dgoal描述某个插件目标信息,-Ddetail描述更详细信息)
或者简写,用goal prefix替代groupId:artifactId,省略version,默认获取最新版:mvn help:describe -Dplugin=goal prefix -D参数,如:mvn help:describe -Dplugin= source
其中goal prefix可以通过插件描述中找到。
此外,还能找到bound to phase,是生命周期默认绑定的阶段,当自定义绑定中不写phase,那么会在goal默认绑定的阶段执行该插件目标。
插件仓库
通过pluginRepository元素配置,其余与repostory一样,在超级POM中(Maven安装目录下lib/maven-model-builder-3.2.5.jar中,解压缩找到org\apache\maven\model\pom-4.0.0.xml)也有配默认地址——中央仓库
central Central Repository https://repo.maven.apache.org/maven2 default false never
同时在超级POM中还制定了核心插件的默认版本,当别的插件没有指定版本时,Maven将取最新的release版本。
*
參考: 《Maven实战》