“ mvn clean package”和“ mvn clean install”有何区别?


277

mvn clean package和之间到底有什么区别mvn clean install?当我运行这两个命令时,它们似乎都在做相同的事情。


12
请查看Build Lifecycle-Lifecycle Reference简介,并查找packageinstall
Charlee Chitsuk

3
一个软件包(在目标中构建)和安装时(将其打包并放置在您的存储库中)如果要在另一个模块中使用此版本,则需要执行后一个。
彼得·劳瑞

3
也许应该重新打开?完全有可能回答,我并不觉得很难回答。此外,如果某人是Maven的新手,那么很容易看到两个阶段看起来是在做相同的事情。我将对其进行编辑,以使其不那么模糊。
Daniel Kaplan 2014年

Answers:


370

好吧,两个都会干净。这意味着他们将删除目标文件夹。真正的问题是打包和安装之间有什么区别?

package将编译您的代码并将其打包。例如,如果您的pom表示该项目是jar,则在打包并将其放置在目标目录中的某个位置时(默认情况下),它将为您创建jar。

install将进行编译和打包,但也会将该包放入您的本地存储库中。这样,其他项目就可以引用它并从本地存储库中获取它。

文献资料


为什么mvn的安装速度比mvn软件包的安装速度快?
lostintranslation

9
@SharadHolani,因为构建是增量的。mvn clean install不比快mvn package
OrangeDog

对于我的项目,构建胖子罐的mvn package assembly:sing比安装mvn花的时间更长。打包并安装都可以构建等效的胖子吗?
lostintranslation

1
@RakeshYadav是的
Daniel Kaplan

116

clean的功能(在两个命令中都很常见)-删除先前版本生成的所有文件


谈到命令安装之间的差异,您首先需要了解maven项目生命周期


这些是Maven中的默认生命周期阶段

  • 验证 -验证项目正确并且所有必要的信息均可用
  • 编译 -编译项目的源代码
  • 测试 -使用合适的单元测试框架测试已编译的源代码。这些测试不应要求将代码打包或部署
  • package-打包已编译的代码,并将其打包为可分发的格式,例如JAR。
  • 验证 -对集成测试的结果进行任何检查,以确保符合质量标准
  • install-将软件包安装到本地存储库中,以作为本地其他项目中的依赖项
  • 部署 -在构建环境中完成,将最终软件包复制到远程存储库,以便与其他开发人员和项目共享。

Maven的工作方式是,如果您在任何生命周期阶段都运行命令,它将在执行命令本身之前按顺序执行每个默认生命周期阶段。

执行顺序

验证>>编译>>测试(可选)>>包>>验证>>安装>>部署

因此,当您运行命令mvn package时,它将运行所有生命周期阶段的命令,直到package

验证>>编译>>测试(可选)>>程序包

至于mvn install,它将在安装之前一直运行所有生命周期阶段的命令,其中包括软件包

验证>>编译>>测试(可选)>>包>>验证>>安装


因此,实际上,这意味着安装命令可以完成package命令所做的所有工作,甚至更多(将软件包安装到本地存储库中,以作为本地其他项目中的依赖项)

资料来源:Maven生命周期参考


1
这应该标记为已接受的答案。这样可以清楚地定义和帮助OP理解maven生命周期的不同阶段,以及为什么mvn install包含mvn软件包,而不是相反。
贾斯梅特·辛格

1
简而言之,Maven太棒了!
CodeSlave

19

软件包将根据POM文件生成Jar / war。 install会将生成的jar文件安装到本地存储库以获取其他依赖项(如果有)。

安装阶段在软件包阶段之后


首先将进行打包,然后将安装那些软件包(jar / war)。
Abdul Gafoor

1
“安装阶段紧随软件包阶段”。当前的表达方式是向后的。“跟随”是指“之后”。
查尔斯·伍德

11

打包和安装是maven构建生命周期的各个阶段。打包阶段将在此之前执行所有阶段,并且将项目打包为罐子。同样,安装阶段将执行所有之前的阶段,最后为其他从属项目在本地安装该项目。

要了解Maven构建生命周期,请通过以下链接https://ayolajayamaha.blogspot.in/2014/05/difference-between-mvn-clean-install.html


1
您的意思是“并最终在本地为其他从属项目安装该项目”
Arun Gowda

2
@ArunGowda表示在安装maven时在系统中创建的.m2中,将添加您正在打包的项目,并将其作为依赖项供其他项目使用。
JAVA

一张图片是一千个字,有人得到图吗?

@MrCholo mvn install会将jar / war放入您的Maven存储库中。存放所有Maven依赖项的地方,通常为〜/ .m2
brt

6

package将打包jar或添加war到您的 target文件夹,我们可以在何时检查它,我们清空目标文件夹(使用 mvn clean),然后运行mvn package
install将执行所有package操作,此外,还将添加打包jarwar在本地存储库中。我们可以通过签入您的.m2文件夹进行确认。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.