【问题标题】:How are "mvn clean package" and "mvn clean install" different?“mvn clean package”和“mvn clean install”有什么不同?
【发布时间】:2013-05-12 04:58:15
【问题描述】:

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

【问题讨论】:

  • 请查看Introduction to the Build Lifecycle - Lifecycle Reference并寻找packageinstall
  • 一个包(在目标中构建)和安装(包并将其放置在您的存储库中)如果您想在另一个模块中使用此版本,则需要稍后执行。
  • 也许这应该重新打开?完全有可能回答,我并不觉得很难回答。此外,如果某人是 Maven 的新手,很容易看出这两个阶段是如何做同样的事情的。我将对其进行编辑以使其不那么含糊。

标签: java maven


【解决方案1】:

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

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

mvn install 命令主要用于当你想要编译一个项目(库)时,你的存储库中的其他项目都依赖它。

【讨论】:

    【解决方案2】:

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


    说到packageinstall命令的区别,你首先需要了解maven项目的生命周期


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

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

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

    执行顺序

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

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

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

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

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


    所以,实际上它的意思是,install 命令完成了 package 命令所做的一切以及更多(将包安装到本地存储库中,以用作依赖项在当地的其他项目中)

    来源:Maven lifecycle reference

    【讨论】:

    • 这应该被标记为接受的答案。这清楚地定义并帮助 OP 了解 maven 生命周期的不同阶段以及为什么 mvn install 包含 mvn 包而不是相反。
    • Maven 简而言之,太棒了!
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

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

      Documentation

      【讨论】:

      • 为什么 mvn install 比 mvn package 快?
      • @SharadHolani 因为构建是增量的。 mvn clean install 不比 mvn package 快。
      • 对于我的项目,构建 fat jar 的 mvn package assembly:single 比 mvn install 需要更长的时间。是否打包并安装两个构建等效的胖罐子?
      • @RakeshYadav 是的
      【解决方案5】:

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

      安装阶段在打包阶段

      之后

      【讨论】:

      • 首先打包,然后安装这些包(jar/war)。
      • “安装阶段跟随包阶段”。它目前的措辞方式是倒退的。 “随后”的意思是“之后”。
      【解决方案6】:

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

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

      【讨论】:

      • 你说的“&最后为其他依赖项目在本地安装项目”是什么意思
      • @ArunGowda 这意味着在安装 maven 时在您的系统中创建的 .m2 中将添加您正在打包的项目,并可作为依赖项用于其他项目。
      • 一张图片是1000字,有图吗?
      • @MrCholo mvn install 会将 jar/war 放入您的 maven 存储库中。存储所有 maven 依赖项的地方,通常是 ~/.m2
      猜你喜欢
      • 2018-10-08
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      • 1970-01-01
      • 2016-07-27
      • 1970-01-01
      • 2016-11-11
      相关资源
      最近更新 更多