"mvn clean package"和"mvn clean install"有何不同?

Ben*_*Ben 231 java maven

mvn clean package和之间究竟有什么区别mvn clean install?当我运行这两个命令时,它们似乎都做同样的事情.

Dan*_*lan 320

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

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

install将编译和打包,但它也会将包放在本地存储库中.这将使其他项目可以引用它并从本地存储库中获取它.

文档

  • @SharadHolani因为构建是增量的.`mvn clean install`并不比`mvn package`快. (7认同)

Ket*_*n R 60

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


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


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

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

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

执行顺序

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

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

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

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

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


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

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

  • 这应该标记为已接受的答案。这清楚地定义并帮助OP理解maven生命周期的不同阶段以及为什么mvn install包含mvn package而不是相反。 (8认同)
  • 我最喜欢的解释,谢谢! (3认同)
  • 简而言之,Maven,太棒了! (3认同)

Abd*_*oor 17

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

封装阶段后安装阶段


Aar*_*esh 9

打包和安装是maven构建生命周期中的各个阶段.包阶段将执行之前的所有阶段,它将停止将项目打包为jar.类似地,安装阶段将执行所有先前阶段,最后在本地为其他依赖项目安装项目.

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

  • @ArunGowda 这意味着在安装 maven 时在您的系统中创建的 .m2 将添加到您正在打包的项目中,并且可用于其他项目作为依赖项。 (2认同)

Nis*_*til 6

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


小智 6

mvn package 命令将编译源代码,并将其按照 pom 文件打包为 jar 或 war 并将其放入目标文件夹(默认情况下)。

mvn install 命令将编译并打包,但它也会将包放入本地存储库中。这样其他项目就可以引用它并从本地存储库中获取它。

mvn install 命令主要用于当您想要编译存储库中的其他项目所依赖的项目(库)时。