2017-08-18 26 views
1

如果存储库中存在某个工件确实存在,我该如何使构建失败? Maven Wagon Plugin有一个“存在”的目标,但不是相反。如果某个工件已经存在,如何使Maven构建失败

我的问题的原因如下。

我的Maven项目经历了一个自动构建管道,这个管道在发布阶段结束。在设置版本为mvn versions:set -DremoveSnapshot后,此阶段通过mvn deploy -P release执行自动发布。该阶段是手动触发的(因为并非每次推送都会导致发布)。

如果要上载的工件已存储在存储库中,则mvn deploy将失败,但在管道的最后阶段,此故障将很晚。

为了获得快速失败的行为,我想检查一下将要发布的工件是否已经上传到Nexus上而不是。我想在管道的第一阶段执行此操作,它只执行mvn package -P releasable。优选地,“可释放”配置文件将使Maven在默认生命周期的“验证”阶段期间自动检查。

+0

这意味着你的poms版本没有正确更新到未正确维护导致在Nexus部署期间失败意味着您尝试部署的版本已经存在? – khmarbaise

+0

@khmarbaise是的 – Rinke

+0

好吧所以现在的问题是:为什么你没有正确的维护版本是基于场景暗示的? – khmarbaise

回答

2

如果要上传的神器已经在仓库

注MVN部署会失败:只有当您上传的“释放”,不是一个“快照”。

你构建能check first if that release version exists

mvn dependency:get -Dartifact=g:a:v -o -DrepoUrl=file://path/to/your/repo 

如果GAV(组伪影版本)不存在,那么你不构建的其余部分进行。

要保留在pom.xml,你可以使用:

依赖关系:只需将工件放入本地存储库(如果存在)。
我不知道如何从这一点失败的构建,因为检查本地回购不够好。

您可以检查依赖项工件是否存在于本地maven仓库中。

+0

对,我忘了提及释放阶段剥去了“-SNAPSHOT”部分。感谢你的回答。你说:“...那么你不会继续构建的其余部分。”这怎么可能完成? – Rinke

+0

@Rinke“那么你就不要继续构建其余的部分了,怎么能这样做呢?”通过一个包装器(你写的一个脚本),首先进行检查,然后只有在检查通过时才调用通常的Maven构建。 – VonC

+0

啊,你的意思是像一个shell脚本。它不能在Maven本身解决吗?我希望一个配置文件在默认生命周期的“验证”阶段处理它。 (我更新了我的问题,以说明这一点。) – Rinke