如果从Nexus清除本地缓存的快照,则强制Maven使构建失败

时间:2013-02-19 22:58:31

标签: maven build

  1. 让一个项目引用库快照版本,比如library:1.0.0-SNAPSHOT
  2. 在本地构建项目,使Maven将library:1.0.0-SNAPSHOT拉入其本地缓存。
  3. 从Nexus(或您选择的工件存储区)清除library:1.0.0-SNAPSHOT,可能是mvn release图书馆。
  4. 再次在本地构建项目,可能是--update-snapshots - 成功
  5. 这里的问题是: 如何在清除远程快照时使Maven 失败本地构建?

    我想在持续集成系统中实现这一壮举,这意味着要求我在构建之前消除整个本地缓存的解决方案是不可能的。同样不可能的是内省项目的POM,并在构建之前手动删除本地缓存中的工件。

    注意:我已经向Maven提交了#MNG-5245,希望如果遗漏,可以加快创建此功能。因此,如果您发现此错误报告,请抵制使用它作为答案的诱惑。

3 个答案:

答案 0 :(得分:1)

不,Maven不支持这一点。我无法想象一个问题,它也是正确的解决方案。我建议你问另一个问题并解释你想要完成的事情。你可能会发现有更好的方法去那里。

答案 1 :(得分:1)

我能想到的最接近的是,在本地构建之前,首先对本地存储库中的快照执行本地存储库清除。

http://maven.apache.org/plugins/maven-dependency-plugin/purge-local-repository-mojo.html

“成功”构建的原因是因为Maven实际上可以在本地存储库中找到相应的快照工件。由于Maven没有“陈旧”工件概念,所有本地存储的工件实际上都是有效的工件(包括快照)。您可以做的最好的事情是确保本地存储库中没有快照工件,并强制Maven从远程仓库下载。但是,只有从远程仓库下载所有依赖项时,它才有效。

答案 2 :(得分:1)

Maven依赖插件具有purge local repository目标,可以配置为从本地存储库中删除特定工件。如果您在托管CI服务的同一服务器上创建发布版本(因此需要清除本地存储库),您可以将dependency:purge-local-repository的执行添加到由Maven发布插件激活的配置文件中在release:perform期间。

请注意,这无法清除单个开发计算机上的本地存储库。