mvn命令
- mvn clean package:打包
- mvn clean install:安装到本地
- mvn clean deploy:部署到远程私服
生命周期
生命周期---->phase---->plugin goal
maven生命周期就是对传统软件项目构件的抽象
清理–》初始化–》编译–》测试–》打包–》集成测试–》验证–》部署–》站点生成
maven有3套生命周期,clean、default、site。每套生命周期可以独立运行,每个生命周期包含多个phase,每个phase又是各种插件的goal来完成的,一个插件的goal可以认为是一个功能
maven的构建原理:每次执行一个生命周期,都会依次执行这个生命周期内部的多个phase,每个phase执行都会执行某个插件的goal来完成具体的功能
clean生命周期
phase
- pre-clean
- clean
- post-clean
default生命周期
phase
- 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上传到远程仓库中,这样公司内其他开发人员也可以使用了
site生命周期
phase
- pre-site
- site
- post-site
- site-deploy
phase与plugin goal的绑定关系
resources:resources:这格式是指resources的这个plugin的resources goal(resources功能负责处理资源文件)
phase | plugin goal |
---|---|
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的生命周期绑定
phase | plugin goal |
---|---|
site | site:site |
site-deploy | site:deploy |
clean的生命周期绑定
clean clean:clean
mvn命令行与生命周期关系
mvn clean package
执行这个命令行,会执行clean生命周期,在clean phase之前的所有phase和clean phase,pre clean,clean
同时会执行default生命周期,在package phase之前的所有phase和package phase
mvn clean install
mvn clean deploy
不执行任何一个生命周期的任何一个phase,直接指定要执行的goal
- mvn dependency:tree
执行dependency这个插件tree的goal
- mvn deploy:deploy-file
执行deploy插件的deploy-file这个goal
Plugin插件管理
插件和goal
每个插件都有多个goal,每个goal都有一个具体的功能
插件的goal写法,plugin:goal
插件goal绑定phase
例如:将source插件的jar-no-fork goal绑定到verify phase上,在完成集成测试之后,就生成源码jar包
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.2</version>
<executions>
<execution>
<id>attach-source</id>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
插件配置
如果在命令行执行插件,可以用-Dkey=value来进行插件配置
比如:mvn -install -Dmaven.test.skip=true,就是跳过单元测试
也可以在pom.xml配置文件中配置
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.4</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
官网插件
http://maven.apache.org/plugins/index.html
插件的远程仓库配置
在setting.xml配置文件中指定插件的远程仓库配置
<profile>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>Nexus Plugin Repository</name>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>