代码之家  ›  专栏  ›  技术社区  ›  Pascal Thivent

如果我运行mvndeploy,它是构建新的构件还是仅仅将已经存在的构件部署到远程服务器?

  •  22
  • Pascal Thivent  · 技术社区  · 15 年前

    注: 这个问题最初是由 Lahiru Gunathilake 作为 answer 对另一个 question

    当我们进行发布时,我们只需在本地机器中构建并执行QA,然后将其托管到存储库中。如果我们跑 mvn deploy 它是否创建了新的工件,这会导致存储库和二进制发行版中存在不同的工件,因为我们是从本地存储库创建二进制发行版的。但是如果有人得到源代码并进行构建,他们会得到不同的源代码。但如果 不构建但只部署它很好。

    1 回复  |  直到 7 年前
        1
  •  32
  •   Community CDub    4 年前

    如中所述 Build Lifecycle Basics :

    每个构建生命周期都由不同的构建阶段列表定义,其中构建阶段表示生命周期中的一个阶段。

    Lifecycle Reference ):

    • validate -验证项目是否正确,所有必要信息是否可用
    • compile -编译项目的源代码
    • test -使用合适的单元测试框架测试编译的源代码。这些测试不应要求打包或部署代码
    • package -获取编译后的代码,并将其打包为可分发的格式,如JAR。
    • integration-test -如有必要,处理包并将其部署到可以运行集成测试的环境中
    • verify -运行任何检查以验证包是否有效并符合质量标准
    • install -将包安装到本地存储库中,作为本地其他项目中的依赖项使用
    • deploy

    这些构建阶段(加上此处未显示的其他构建阶段)按顺序执行,以完成默认生命周期。鉴于上述构建阶段,这意味着当使用默认生命周期时,Maven将首先验证项目,然后尝试编译源代码,根据测试运行源代码,打包二进制文件(例如jar),针对该包运行集成测试,验证包,将verifed包安装到本地存储库,然后在指定的环境中部署已安装的包。

    要执行所有这些操作,只需调用要执行的最后一个构建阶段,在本例中,部署:

    mvn deploy
    

    这是因为如果您调用一个构建阶段,它不仅会执行该构建阶段,而且还会执行调用的构建阶段之前的每个构建阶段。

    mvn deploy 将执行 安装