387

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

4

6 回答 6

487

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

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

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

文档

于 2013-05-17T05:34:26.390 回答
252

clean 的作用(在两个命令中都很常见) - 删除之前构建生成的所有文件


谈到命令packageinstall之间的区别,您首先需要了解maven 项目的生命周期


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

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

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

执行顺序

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

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

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

至于mvn install,它运行所有生命周期阶段的命令,直到安装,其中还包括包

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


因此,实际上它的意思是,安装命令执行命令所做的所有事情以及更多(将包安装到本地存储库中,以用作本地其他项目的依赖项)

来源:Maven 生命周期参考

于 2019-04-12T06:16:11.707 回答
26

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

安装阶段在阶段之后

于 2017-07-06T08:08:20.773 回答
15

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

于 2018-10-15T13:21:35.647 回答
11

打包和安装是 Maven 构建生命周期中的各个阶段。package 阶段将在此之前执行所有阶段,它将停止将项目打包为 jar。同样,安装阶段将执行所有先前的阶段并最终在本地为其他依赖项目安装项目。

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

于 2016-12-02T13:12:41.273 回答
1

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

mvn install 命令将编译和打包,但它也会将包放在本地存储库中。以便其他项目可以引用它并从您的本地存储库中获取它。

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

于 2021-09-21T10:31:35.733 回答