Maven部署:即使工件已经存在,也会强制部署

时间:2012-06-24 05:54:04

标签: maven

我正在构建一个项目,该项目由几个(有时是不相关的)模块和一些非标准的Java模块(使用ANT构建)组成。

每个maven模块在完成时部署到版本库。

如果构建在中间失败,我可能已经部署了一些模块,因此如果我尝试重建,则新的部署尝试将失败,因为已经部署了工件。

是否可以强制部署,或者在我再次部署之前删除已部署的工件?

3 个答案:

答案 0 :(得分:12)

听起来中间件管理员已将远程仓库实例(Nexus或Artifactory或其他)配置为不允许进行工件重新部署,并且正如@khmarbaise所说,有充分的理由。 Nexus可以配置为允许特定角色的用户删除工件或具有工件删除权限。如果您的管理员以这种方式设置它,也许您可​​以请求删除权限并删除有问题的工件。或者,也许Nexus管理员会同意为您做这件事。

如果这些都不可能,那么可以尝试一些可能会在未来发生这种情况的事情:

  1. 如果您使用的是release插件,请首先在release:prepare命令行上执行干运行(-DdryRun=true)。 Maven应该在不提交SCM的情况下报告任何错误。
  2. 首先尝试在您的项目组中运行mvn install。这会将工件安装到本地仓库,而不是远程。如果出现问题,您可以从本地仓库中取出工件并从头开始,重复直到完成构建。
  3. 如果您正在运行多模块构建,则command line options允许从特定项目向前恢复Maven构建。
  4. 在Maven命令行上定义-Dmaven.deploy.skip=true。这类似于建议#2,除了Maven实际上会加载&配置deploy plugin,它不会实际部署到远程仓库。一切正常后,删除skip属性。

答案 1 :(得分:9)

我知道它可能会迟到,但在Nexus中,有一个选项允许重新部署工件。

enter image description here

只需选择左侧的存储库,选择要更改策略的存储库,然后将其设置为允许重新部署。

答案 2 :(得分:3)

可能的选项已经增加;)

使用参数deployAtEnd(更多信息:here)。如果所有工件都已成功构建,则使用此参数仅部署工件。