Maven常见生命周期阶段的作用

devtools/2024/9/22 15:03:58/

文章目录

  • 一、生命周期阶段
    • 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阶段。


http://www.ppmy.cn/devtools/45866.html

相关文章

C语言案例-输入任意三个数,按从大到小的顺序输出.

目录 问题待续、更新中 问题 输入任意三个数,按从大到小的顺序输出. 最大值 3数&#xff0c;重新排序输出 输出数据if来&#xff0c;ab ac bc比&#xff0c;比中里面交换值&#xff0c;输出abc时为降序 代码如下: #include <stdio.h> void main() {int a,b,c,t;printf(&…

数据探索与分析的瑞士军刀:深入Python的pandas库

文章目录 数据探索与分析的瑞士军刀&#xff1a;深入Python的pandas库第一部分&#xff1a;背景第二部分&#xff1a;pandas是什么&#xff1f;第三部分&#xff1a;如何安装pandas&#xff1f;第四部分&#xff1a;pandas库函数使用方法第五部分&#xff1a;场景应用示例第六部…

开利网络参加广州数据交易所学习活动

开利网络做为南沙广州数据交易所的会员参加了由“广东三会”组织的“数据资产”相关学习活动。&#xff08;下图为开利董事长付立军先生在签到&#xff09; 学习内容提现了数字时代企业数字化转型的核之心“发掘数据价值&#xff0c;驱动高速发展”&#xff0c;交易中心组织大家…

Uniapp写一个简单的商品瀑布流界面+商品详情

最终效果&#xff1a; 整体内容比较简单&#xff0c;参考了一篇瀑布流文章和一篇商品详情文章随便修改整了下&#xff0c;主要是给想做这方便面的新人一个简单逻辑的展示&#xff08;其实我也是第一次写这个emmm&#xff09; 一.组件下载&#xff1a; uni-icon uni-goods-nav…

Python应用开发——Streamlit 创建多页面应用程序进行APP的构建

创建多页面应用程序 在附加功能中,我们介绍了多页面应用程序,包括如何定义页面、构建和运行多页面应用程序,以及如何在用户界面的页面间导航。更多详情,请参阅多页面应用程序指南Multipage apps - Streamlit Docs 在本指南中,让我们通过将上一版本的 streamlit hello 应…

HTML:认识HTML与基本语法的学习

前言 HTML&#xff08;超文本标记语言&#xff09;是用于创建网页的标记语言&#xff0c;由一系列标签组成&#xff0c;定义网页中的元素。由蒂姆伯纳斯 - 李于1990年代初发明&#xff0c;最初用于科研机构间共享文档&#xff0c;迅速演变为Web开发基础。无论是电商、博客、新…

Jenkins流水线pipeline--基于上一章的工作流程

1流水线部署 1.流水线文本名Jenkinsfile,将流水线放入gitlab远程仓库代码里面 2构建参数 2pipeline脚本 Jenkinsfile文件内容 pipeline {agent anyenvironment {key"value"}stages {stage("拉取git仓库代码") {steps {deleteDir()checkout scmGit(branc…

即时通讯平台及门户系统WorkPlus打造移动应用管理平台

在全球化和数字化时代&#xff0c;企业管理和沟通的方式正发生着巨大的变化。为了实现高效的协作和资源共享&#xff0c;企业越来越倾向于使用即时通讯及门户系统。这两种系统结合起来&#xff0c;可以提供一套完整的沟通和信息发布平台&#xff0c;促进内部协作和信息管理。 …