ChatGPT解决这个技术问题 Extra ChatGPT

mvn clean install vs. deploy vs. release

我只是在学习maven,最近我们需要越来越多。我想知道两者的区别

mvn clean install

mvn release

mvn deploy

请尽可能描述。


P
Pascal Thivent

cleaninstalldeploy 阶段 是有效的 lifecycle phases,调用它们将触发它们之前的所有阶段,以及绑定到这些阶段的目标。

mvn 干净安装

此命令依次调用 clean 阶段和 install 阶段:

clean:删除项目目录中构建时生成的文件(默认为目标)

install:将包安装到本地存储库中,以用作本地其他项目的依赖项。

mvn 部署

此命令调用 deploy 阶段:

deploy:将最终包复制到远程存储库,以便与其他开发人员和项目共享。

mvn 发布

这不是一个有效的阶段,也不是一个目标,所以这不会做任何事情。但 if 指的是用于自动化发布管理的 Maven Release Plugin。发布项目分两步完成:prepareperform。如文件所述:

准备发布会经历以下发布阶段: 检查源中是否没有未提交的更改 检查是否没有 SNAPSHOT 依赖项 将 POM 中的版本从 x-SNAPSHOT 更改为新版本(系统将提示您输入要更新的版本)使用)转换 POM 中的 SCM 信息以包含标记的最终目的地 针对修改后的 POM 运行项目测试以确认一切正常 提交修改后的 POM 用版本名称标记 SCM 中的代码(这将是提示)将 POM 中的版本添加到新值 y-SNAPSHOT(这些值也会被提示)提交修改后的 POM

接着:

执行发布会运行以下发布阶段: 从带有可选标签的 SCM URL 签出 运行预定义的 Maven 目标以发布项目(默认情况下,部署站点部署)

也可以看看

构建生命周期简介

Maven 发布插件


你能澄清一下吗:这不是一个有效的阶段,也不是一个目标,所以这不会做任何事情。但是如果指的是Maven Release Plugin。如果它既不是阶段也不是目标,那我们怎么称呼它呢?
C
Colin Hebert

mvn install 会将您打包的 maven 项目放入本地存储库,以供本地应用程序使用您的项目作为依赖项。

mvn release 基本上会将您当前的代码放在您的 SCM 上的标签中,在您的项目中更改您的版本。

mvn deploy 会将您打包的 maven 项目放入远程存储库中,以便与其他开发人员共享。

资源 :

Maven 安装插件

Maven 发布插件

Maven 部署插件


如果我在每个命令上都加上 clean 意味着什么?可以说, mvn clean install 然后执行另一个命令 mvn clean deploy?它会一样吗?
install 在部署后运行,它们都是生命周期阶段。它们相互依赖并按顺序依次执行(构建然后测试然后打包然后安装然后部署)。每个阶段按顺序调用其所有依赖阶段(如 maven 所定义,请参阅生命周期阶段文档)。所以简而言之...部署将运行安装运行的所有内容,因此您通过执行 mvn install 来浪费时间,只需执行 mvn deploy。