文章目录
- 一、生命周期阶段
- 1.clean
- 2.compile
- 3.test
- 4.package
- 5.verify
- 6.install
- 7.site
- 8.deploy
- 二、compile、package、install的区别
- 1.compile阶段:
- 2.package阶段:
- 3.install阶段:
- 4.compile和package的区别
- 5.package和install的区别
一、生命周期阶段
1.clean
清理上一次构建生成的文件,通常是删除target/目录及其内容。
validate
验证项目是否正确以及所有必需的信息是否可用。此阶段默认什么也不做,但可以在子POM中配置插件来执行验证任务。
2.compile
编译项目的源代码。
通常是编译主代码(src/main/java)到target/classes目录。
3.test
使用适当的单元测试框架(如JUnit)运行测试。
在编译测试代码(src/test/java)之后执行。
4.package
将编译后的代码打包成可分发的格式,如JAR、WAR或EAR文件。
对于JAR包,会生成在target/目录下的.jar文件;对于WAR包,会生成.war文件,依此类推。
5.verify
运行任何检查以验证包是否有效且达到质量标准。
默认此阶段什么也不做,但可以在子POM中配置插件来执行验证任务。
6.install
将包安装到本地Maven仓库,以便本地其他Maven项目可以作为依赖使用它。
在执行install之前,会先执行package阶段(如果需要的话)。
7.site
生成项目站点文档。
通常使用Maven站点插件(Maven Site Plugin)来生成文档、报告和API文档等。
8.deploy
将最终的包复制到远程仓库,以便其他开发者或系统可以使用或依赖。
在执行deploy之前,会先执行install阶段(如果需要的话)。
Maven的生命周期是线性的,这意味着一个阶段的所有目标都被执行完毕后,下一个阶段的目标才会开始执行。例如,在test阶段的所有目标执行完毕后,package阶段的目标才会开始执行。
你可以使用Maven的命令行界面(CLI)来运行这些阶段,如mvn clean install,这将会执行clean和install阶段以及它们之前的所有阶段(validate、compile、test、package)。如果只运行mvn package,则只会执行到package阶段及其之前的阶段。
二、compile、package、install的区别
1.compile阶段:
目标:编译项目的源代码。
操作:此阶段会编译项目的主源代码(通常位于src/main/java目录下),并将编译后的字节码文件(.class文件)输出到项目的target/classes目录中。
依赖:在编译源代码之前,Maven会首先解析项目依赖,确保所有需要的库都已可用。
注意:compile阶段不会生成最终的分发包(如JAR、WAR等),只是将源代码编译成字节码。
2.package阶段:
目标:将编译后的代码打包成可分发的格式。
操作:此阶段会根据项目的packaging类型(在pom.xml中定义)来打包项目。例如,对于JAR项目,Maven会创建一个JAR文件;对于WAR项目,会创建一个WAR文件。这些文件通常位于项目的target/目录下。
依赖:在打包之前,Maven会先执行compile阶段(如果还没有执行的话),以确保所有的源代码都已经被编译。此外,Maven还会将所有项目依赖的库打包到最终的分发包中(对于JAR项目,通常会将依赖的库打包到target/lib目录或者将依赖包含在JAR文件的Class-Path中,具体取决于配置)。
3.install阶段:
install阶段在package阶段之后执行,因此它首先会完成打包的工作。
完成打包后,install阶段会将生成的包文件安装到本地Maven仓库中。
这样做的目的是让其他Maven项目能够引用这个包作为依赖,因为Maven在解析依赖时会首先查找本地仓库。
通过install,你可以确保本地开发的其他项目能够使用到最新版本的代码,而无需发布到远程仓库。
注意:package阶段会生成最终的分发包,这个包可以被部署到服务器或者作为其他项目的依赖。
4.compile和package的区别
总结来说,compile阶段主要负责将源代码编译成字节码,而package阶段则负责将编译后的代码和依赖打包成可分发的格式。这两个阶段在Maven的构建过程中是顺序执行的,package阶段会依赖于compile阶段的结果。
5.package和install的区别
简而言之,package仅仅是打包项目,而install则不仅打包项目,还将打包好的文件安装到本地Maven仓库中,以便其他项目可以引用。如果你只是想生成一个可分发的包而不打算在其他项目中使用它,那么执行到package阶段就足够了。如果你想在其他本地Maven项目中使用这个包,那么你需要执行到install阶段。