我正在构建一个项目,它由几个(有时是不相关的)模块和一些非标准的 java 模块(用 ANT 构建)组成。
每个 maven 模块在完成时部署到发布存储库。
如果构建在中间失败,我可能已经部署了一些模块,所以如果我尝试重建,新的部署尝试将失败,因为工件已经部署。
是否可以强制部署,或者在我再次部署之前删除已部署的工件?
我正在构建一个项目,它由几个(有时是不相关的)模块和一些非标准的 java 模块(用 ANT 构建)组成。
每个 maven 模块在完成时部署到发布存储库。
如果构建在中间失败,我可能已经部署了一些模块,所以如果我尝试重建,新的部署尝试将失败,因为工件已经部署。
是否可以强制部署,或者在我再次部署之前删除已部署的工件?
听起来中间件管理员已将您的远程仓库实例(Nexus 或 Artifactory 或其他)配置为不允许重新部署工件,正如@khmarbaise 所说,这是有充分理由的。可以将 Nexus 配置为允许具有特定角色或具有工件删除权限的用户删除工件。如果您的管理员以这种方式进行设置,您可能可以请求删除权限并删除有问题的工件。或者,也许 Nexus 管理员会同意为您执行此操作。
如果这些都不可能,那么可以尝试以下一些方法来防止这种情况在未来发生:
release
插件,请先进行试运行(-DdryRun=true
在 release:prepare 命令行上)。Maven 应该在不提交 SCM 的情况下报告任何错误。mvn install
在您的项目组上运行。这会将工件安装到您的本地仓库,而不是远程仓库。如果出现问题,您可以从本地存储库中删除工件并从头开始,重复直到获得完整的构建。-Dmaven.deploy.skip=true
在 Maven 命令行上定义。这类似于建议 #2,除了 Maven 将实际加载和配置部署插件,它只是不会实际部署到远程仓库。一切正常后,删除 skip 属性。增加了可能的选项;)
使用参数 deployAtEnd(更多信息:这里)。如果所有工件都已成功构建,则使用此参数仅部署工件。