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

Maven部署:即使工件已经存在,也强制部署,maven,Maven,我正在构建一个项目,它由几个有时不相关的模块和一些用ANT构建的非标准java模块组成 每个maven模块在完成时都部署到版本存储库中 如果构建在中间失败,我可能已经部署了一些模块,所以如果我尝试重建,部署的新尝试将失败,因为已经部署了工件。 是否可以强制部署,或者在我再次部署之前删除已部署的工件?听起来中间件管理员已经配置了远程repo实例Nexus或Artifactory或其他不允许工件重新部署的东西,正如@khmarbaise所说,这有很好的理由。Nexus可以配置为允许具有特定角色或工件

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

每个maven模块在完成时都部署到版本存储库中

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


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

听起来中间件管理员已经配置了远程repo实例Nexus或Artifactory或其他不允许工件重新部署的东西,正如@khmarbaise所说,这有很好的理由。Nexus可以配置为允许具有特定角色或工件删除权限的用户删除工件。如果您的管理员以这种方式进行了设置,那么您可以请求删除权限并删除有问题的工件。或者,也许Nexus管理员会同意为您这样做

如果这两种方法都不可行,那么以下是一些可以避免将来发生这种情况的方法:

如果您使用的是release插件,请先在release:prepare命令行上运行-DdryRun=true。Maven应该报告任何错误而不提交给SCM。 首先尝试在您的项目组上运行mvn安装。这将把工件安装到本地repo,而不是远程repo。如果有问题,您可以从本地repo中删除工件,从头开始,重复,直到获得完整的构建。 如果您正在运行一个多模块构建,那么有一些方法允许从特定的项目继续Maven构建。 在Maven命令行上定义-Dmaven.deploy.skip=true。这与建议2类似,只是Maven实际上会加载和配置,而不会实际部署到远程repo。一切正常后,删除skip属性。
增加了可能的选择


使用参数deployAtEnd详细信息:。使用此参数,只有在成功构建所有工件的情况下,才会部署工件。

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


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

尝试mvn release:Rollback为什么部署会失败?如果您使用相同版本部署工件,它只会覆盖现有工件。Andrew-AFAIK,如果您尝试重新部署现有工件,您将失败。@om39a A mvn版本:回滚不会从存储库中删除工件。存储库管理器的通常设置是出于充分的理由不允许重新部署工件。问题是:为什么部署会失败?如果它失败了,那就是出了问题,你的配置也不起作用。所有的建议都很好。我想我会选择选项4或类似的。。。谢谢!我有一个类似的问题,一切都很顺利,直到我得到一个502代理错误,我假设我的uni服务器认为我的连接是一个威胁。现在我收到了400个错误的请求,因为工件已经在nexus服务器上了。是否有恢复发布的方法:执行?我可以删除工件,但在nexus控制面板中需要做很多工作。似乎我必须手动删除多模块项目的每个版本子文件夹。不过,下次我会尝试从uni网络内上传!这是一个很好的选择,但我只对构建中的这种功能感兴趣,不允许任何人重新部署已发布的工件。我可以在构建时启用它,在构建完成时禁用它吗?不要认为这是可能的,因为决定是否可以重新部署工件的是服务器,而不是客户端