【问题标题】:Maven different local repositories for SNAPSHOTs and RELEASE artifacts用于 SNAPSHOT 和 RELEASE 工件的 Maven 不同本地存储库
【发布时间】:2017-01-12 10:03:52
【问题描述】:

是否可以在 Maven 中为 SNAPSHOT 和 RELEASE 工件配置不同的本地存储库?

我问的原因是,我们正在使用 Jenkins 为我们的项目进行持续构建。为了确保在构建开始之前的一致性(如果由于竞争条件而从不同的 Jenkins 作业构建相同的工件,我们可能会遇到混乱的行为),我们为 Jenkins 创建了一个新的本地存储库。

现在的问题是,我们的项目非常庞大,因此对于每次构建,我们都必须从 Nexus 下载大量依赖项,但仔细想想,没有理由每次都下载新的 RELEASE 工件。 RELEASE 工件不会因构建而异,例如 Spring 4.5、httpclient 4.0、aspectj 1.8.1 对于一个构建到另一个构建是相同的。

所以实际上为了确保一致性,我们只应该在存储库中不存在 SNAPSHOT 依赖项。如果我们可以有两个本地存储库,一个用于 RELEASE 工件,另一个用于 SNAPSHOT,那么在每次构建开始之前,我们可以删除 SNAPSHOT 存储库,但重新使用本地 RELEASE 存储库,这样可以节省我从 Nexus 下载的千兆字节。

我知道我们可以为远程存储库进行 RELEASE、SNAPSHOT 配置,是否可以为本地存储库进行相同类型的配置?

如果这是不可能的,你将如何解决这个问题。

【问题讨论】:

  • 您应该使用单独的存储库进行快照和发布,这里解释了 pom 配置 stackoverflow.com/questions/14211697/…
  • 本文中解释的是远程存储库(在部署到 Nexus 时进行了讨论)。这不是我想要的,我想定义两个本地存储库,一个用于 SNAPSHOT,一个用于发布。这就是它在 settings.xml "c:\repo" 中的配置方式。我喜欢“c:\repo_snap”和“c:\repo_rel”之类的东西或产生类似效果的方法。
  • 对不起,我误解了我已经添加了答案,你不应该这样做。
  • @posthumecaver 你是怎么解决这个问题的?我看到你没有接受正确的答案。如果您能够以其他方式解决此问题,请发布单独的答案。
  • 不幸的是,仍然没有标准的解决方案,我们最终会做什么,在每次发布开始时,我们都会从本地 maven 存储库中删除所有 SNAPSHOT 依赖项,我们压缩其余的依赖项,然后 jenkins 在下一个构建中开始解压缩这个文件并将它放置到它的本地存储库(使用 groovy 脚本 :( )然后开始构建,这个文件对我们来说大约 500 MB 大,所以我们不必每次都通过网络,它不是很好,但这是我们目前唯一的解决方案..

标签: maven jenkins maven-3


【解决方案1】:

目前没有办法实现这一点,是的,我同意这种观点。

Jenkins 的 Maven 插件的最新版本允许您指定自定义本地存储库,而无需编辑 settings.xml 文件 — 选项就在作业定义屏幕上(在 Advanced 部分,选择 @ 987654323@)。

所以,我要做的是使用此选项,并在 Maven 构建步骤之前使用脚本删除本地私有存储库中的所有目录,这些目录以 -SNAPSHOT 结尾。

很反感,但我想不出别的办法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 2016-04-19
    • 2014-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    相关资源
    最近更新 更多