“mvn clean package”和“mvn clean install”有何不同?

时间:2013-05-17 05:28:39

标签: java maven

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

5 个答案:

答案 0 :(得分:273)

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

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

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

Documentation

答案 1 :(得分:15)

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

阶段

之后

安装阶段

答案 2 :(得分:11)

执行清理操作(在两个命令中都常见)-删除由先前构建生成的所有文件


谈到命令 package install 之间的区别,您首先需要了解maven项目的 生命周期 < / strong>


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

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

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

执行顺序

  

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

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

  

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

,对于 mvn install ,它将运行所有生命周期阶段的命令,直到安装为止,其中还包括软件包

  

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


因此,实际上, install 命令的作用是执行 package 命令所做的所有工作,以及执行其他操作(将软件包安装到本地存储库中,以作为依赖项使用)在本地的其他项目中

来源:Maven lifecycle reference

答案 3 :(得分:9)

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

要了解maven构建生命周期,请浏览以下链接aggregate initialization here

答案 4 :(得分:3)

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