maven生命周期
maven 的生命周期包括三个阶段:clean、deploy、site。三个阶段互相之间独立,但是每个阶段的内部是有先后顺序的。如下图所示:
maven命令的实质
执行maven命令就是执行maven生命周期的各个阶段,并不是maven本生执行命令,而是maven的插件执行命令。
maven的生命周期与插件是互相绑定的,绑定的格式一般为 插件:生命周期,例如:maven-clean-plugin:clean、maven-compiler-plugin:compiler、maven-site-plugin:deploy,用maven命令执行maven各阶段的生命周期
maven命令:mvn clean 则调用maven-clean-plugin:clean
mvn compiler 则调用maven-compiler-plugin:compiler
mvn deploy 则调用 maven-site-plugin:deploy
maven 命令的自定义绑定
实际常见的例子,创建项目源码的jar包时,固有的插件没有绑定这一层关系,需要我们手动绑定。具体如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.1</version>
<executions>
<execution>
<id>sources</id>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>jar-no-fork是maven-source-plugin的创建原项目jar包的文件,指定到defalt的verify阶段,执行命令maven clean install则生效。
maven 常用命令
mvn clean compile 编译
mvn clean test 测试
mvn clean package 打包
mvn clean install 把生成的jar/war包复制到本地repository(就是~/.m2/repository下面)
mvn clean deploy 把生成的jar/war包发送到远程repository(建议配置了私服,那就是往私服发送了)
mvn cargo:run 通过cargo插件,把生成的war包部署到本地服务器,并启动。(注意要先运行 mvn clean package 打包)
mvn cargo:redeploy 通过cargo插件,把生成的war包部署到远程服务器:如果已经有了,就先undeploy再deploy,如果没有直接deploy(注意要先运行 mvn clean package 打包,并且远程服务器是启动的)
maven多模块项目打包命令
项目parent 下有child-one、child-twol两个项目模块,其中child-two依赖child-one,parent 管理child-one、child-two
<modules>
<module>child-one</module>
<module>child-two</module>
</modules>| 参数 | 说明 |
| -pl | 选项后可跟随{groupId}:{artifactId}或者所选模块的相对路径(多个模块以逗号分隔) |
| -am | 表示同时处理选定模块所依赖的模块 |
| -amd | 表示同时处理依赖选定模块的模块 |
| -N | 表示不递归子模块 |
| -rf | 表示从指定模块开始继续处理 |
例一:
当执行mvn clean install后会得到如下几个模块:parent、child-one、child-two
例二:
-pl 构建制定模块
当执行mvn clean install -pl child-two后会得到如下几个模块:parent、child-one、child-two。
例三:
-am 选项可以同时构建所列模块的依赖模块。
当执行mvn clean install -pl child-one -am 后会得到如下几个模块:parent、child-one
例四:
-amd 选项可以同时构建依赖于所列模块的模块。
mvn clean install -pl child-one-amd 后会得到如下模块:child-one、child-two
例五:
-rf 选项可以在完整的反应堆构建顺序基础上,指定从哪个模块开始构建。
mvn clean install -rf child-one,由于parent位于第一,它之后有child-one、child-two,因此会得到如下输出模块:child-one、child-two
例六:
在-pl -am或者-pl -amd的基础上,还能应用-rf参数,以对裁剪后的反应堆再次裁剪。
mvn clean install -pl child-two -amd -rf child-one
其中,-pl 和 -amd参数会得到:parent、child-one、child-two模块,在此基础上 -rf参数制定从child-one开始构建,于是会得到:child-one、child-two
例七:
mvn clean install -N 得到:parent
maven 跳过测试包的命令
mvn test -Dmaven.test.skip=true 在使用mvn package进行编译、打包时,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下
mvn test -DskipTests 在使用mvn package进行编译、打包时,不执行测试用例,也不编译测试用例类