目录
maven生命周期
maven生命周期以及执行原理
maven的生命周期以及phase
默认的phase和plugin绑定
maven的命令行和生命周期
maven插件
插件和goal
将插件的goal绑定到phase上
配置插件
找到你需要的插件
插件解析
mvn clean package:打包
mvn clean install: 安装到本地
mvn clean deploy:部署到远程私服
clean, default, site
每套生命周期都可以独立运行,每个生命周期的运行都会包含多个phase,每个phase又是由各种插件的goal来完成的,一个插件的goal可以认为是一个功能。
这就是maven的生命周期 -> phase(可以理解为阶段) -> 插件的关系,也是maven构建执行的核心原理
你每次执行一个生命周期,都会依次执行这个生命周期内部的多个phase,每个phase执行时都会执行某个插件的goal完成具体的功能
- pre-clean
- clean
- post-clean
- validate:校验这个项目的一些配置信息是否正确
- initialize:初始化构建状态,比如设置一些属性,或者创建一些目录
- generate-sources:自动生成一些源代码,然后包含在项目代码中一起编译
- process-sources:处理源代码,比如做一些占位符的替换
- generate-resources:生成资源文件,才是干的时我说的那些事情,主要是去处理各种xml、properties那种配置文件,去做一些配置文件里面占位符的替换
- process-resources:将资源文件拷贝到目标目录中,方便后面打包
- compile:编译项目的源代码
- process-classes:处理编译后的代码文件,比如对java class进行字节码增强
- generate-test-sources:自动化生成测试代码
- process-test-sources:处理测试代码,比如过滤一些占位符
- generate-test-resources:生成测试用的资源文件
- process-test-resources:拷贝测试用的资源文件到目标目录中
- test-compile:编译测试代码
- process-test-classes:对编译后的测试代码进行处理,比如进行字节码增强
- test:使用单元测试框架运行测试
- prepare-package:在打包之前进行准备工作,比如处理package的版本号
- package:将代码进行打包,比如jar包
- pre-integration-test:在集成测试之前进行准备工作,比如建立好需要的环境
- integration-test:将package部署到一个环境中以运行集成测试
- post-integration-test:在集成测试之后执行一些操作,比如清理测试环境
- verify:对package进行一些检查来确保质量过关
- install:将package安装到本地仓库中,这样开发人员自己在本地就可以使用了
- deploy:将package上传到远程仓库中,这样公司内其他开发人员也可以使用了
- pre-site
- site
- post-site
- site-deplo
process-resources resources:resources
compile compiler:compile
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
package jar:jar或者war:war
install install:install
deploy deploy:deploy
site site:site
site-deploy site:deploy
clean clean:clean
clean是指的clean生命周期中的clean phase
package是指的default生命周期中的package phase
此时就会执行clean生命周期中,在clean phase之前的所有phase和clean phase,pre clean,clean
同时会执行default生命周期中,在package phase之前的所有phase和package phase
但是,pre clean phase默认是没有绑定任何一个plugin goal的,所以默认什么也不会干;
clean phase默认是绑定了clean:clean,clean plugin的clean goal,所以就会去执行clean插件的clean goal,就会实现一个功能,就是清理target目录下的文件
process-resources resources:resources
compile compiler:compile
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
package jar:jar或者war:war
install install:install
deploy deploy:deploy
就是不执行任何一个生命周期的任何一个phase
直接执行指定的插件的一个goal
比如mvn dependency:tree,就是直接执行dependency这个插件的tree这个goal,这个意思就是会自动分析pom.xml里面的依赖声明,递归解析所有的依赖,然后打印出一颗依赖树
mvn deploy:depoy-file,就是直接执行deploy这个插件的deploy-file这个goal,这个意思就是说将指定目录的jar包,以指定的坐标,部署到指标的maven私服仓库里去,同时使用指定仓库id对应的server的账号和密码。
dependency插件有十几个goal,可以进行分析项目依赖,列出依赖树,等等
插件的goal,写法就是plugin:goal,比如dependency:tree
用mvn dependency:tree,就可以手动执行某个插件的goal,执行某种功能
org.apache.maven.plugins
maven-source-plugin
2.1.1
attach-sources
verify
jar-no-fork
运行mvn verify,就可以看到生成了一个包含源码的jar包
即使不配置绑定的phase也可以,因为大多数插件都默认内置了要绑定的phase,比如这个插件就内置绑定在package phase。
如果在命令行执行插件,可以用-Dkey=value来进行插件的设置
比如mvn install -Dmaven.test.skip=true,就是surefire插件在测试的时候提供的参数,设置为true就会跳过测试
此外也可以在pom.xml中用来配置
org.apache.maven.plugins
maven-compiler-plugin
2.1
1.5
1.5
在http://maven.apache.org/plugins/index.html中可以找到所有的插件,里面有文档
你可以百度搜索,用maven启动jetty插件,用maven部署tomcat插件
先从本地仓库找插件,没有则从远程仓库找插件
插件的远程仓库也需要配置,maven默认配置了远程的插件仓库
central
Maven Plugin Repository
http://repo1.maven.org/maven2
default
false
never
上一篇:华为OD机试题,用 Java 解【水仙花数 2】问题
下一篇:React快速入门