23

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

每个 maven 模块在完成时部署到发布存储库。

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

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

4

3 回答 3

15

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

如果这些都不可能,那么可以尝试以下一些方法来防止这种情况在未来发生:

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

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

在此处输入图像描述

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

于 2016-10-28T12:49:02.420 回答
4

增加了可能的选项;)

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

于 2014-11-10T15:07:22.630 回答