maven用的比较多,但是对于maven的生命周期不是很清楚,所以,做个简单的总结记录。Maven生命周期lifecycle由各个阶段组成,每个阶段由maven插件的plugin来执行完成,生命周期主要包括clean,resources,compile,testResource,testCompile,package,install,deploy等;
1.Mvn clean install
这个命令是最常用的,我们可以手动去执行下,会发现其中包含了很多的生命周期,这里引用网上的一个截图来进行说明
、
可以看到整个执行过程包含了:1.clean 2.resources 3.compile 4.testResources 5.testCompile 6.test 7.jar 8.install;接下来详细说下各个插件的具体的作用;
2.clean
clean插件是一个独立的阶段,功能是删除当前项目的target目录;这个自己也可以测试下,执行之后就是把target目录删除了而已;
3.resources
resources插件的功能是把src/main/resources目录的文件拷贝到target/classes目录下;如果不存在src/main/resources目录,则不会做任何处理,测试期间,可以创建一个resources目录,里面添加个1.txt文件,然后执行resources插件,结果如图所示
4.compile
compile插件执行时,会先执行resources插件,主要的作用就是把src/main/java代码编译成字节码生成class文件,输出到targe/classes目录下;执行效果如图
5.单元测试使用的插件testResource,testCompile
类似于resources和compile,只不过这两个类主要用于对单元测试的资源文件和代码进行编译;生成的文件位于target/test-classes下面;
有时候可以使用mvn -Dmaven.test.skip=true 跳过该步骤
6.package
这个插件是把class文件,resources文件打包成一个jar包,依赖包是不在里面包含的;常用的打包的插件有maven-jar-plugin、maven-assembly-plugin、maven-shade-plugin三种;生成的jar包位于target目录下;
7.install
install是把构建好的artifact部署到本地仓库中;这样本地的其他项目依赖于本项目的jar时可以直接从本地仓库去获取,而不用到远端的私服上去下载;
8.deploy
deploy是将本地的jar部署到远端的仓库;需要在maven的setting.xml中配置私服的用户名和密码;还需要再pom.xml做配置;
<distributionManagement>
<repository>
<id>releases</id>
<name>Internal Releases</name>
<url>http://localhost:8081/nexus/content/repositories/thirdparty</url>
</repository>
<snapshotRepository>
<id>releases</id>
<name>Internal Releases</name>
<url>http://localhost:8081/nexus/content/repositories/thirdparty</url>
</snapshotRepository>
</distributionManagement>
总结:maven的生命周期包含多个阶段,每个阶段由对应的插件去完成对应的动作;其中后面的插件执行会先执行之前的生命周期;