如何在Gradle中同时依赖于Artifactory的发布版和快照版?

3
我觉得Artifactory的“虚拟库”概念有些棘手。我之前使用过Nexus和Maven,但是对Artifactory和Gradle都比较陌生。以前从未遇到过这种问题。
我认为我的场景相当普通,需要大部分的发布依赖和一些开发时的快照依赖。
发布依赖可以在虚拟库“libs-release”(其中包括“libs-release-local”等其他库)中找到,而快照则可以在“libs-snapshot”中找到。
我困惑的是如何在Gradle中使用Artifactory插件定义依赖关系?根据文档和示例,我认为需要类似于以下内容:
artifactory {
  contextUrl = 'http://my-artifactory/artifactory'

  resolve {
    repository {
      repoKey = 'all-my-libs'
    }
  }
}

但这感觉不对 - 如果我把它们全部混在一起使用,那么分开的存储库有什么意义呢?在这个问题的回答中,评论支持了我的担忧。该问题讨论了/repo虚拟存储库,但出于某种原因,我无法使用它。如果我尝试使用它,会收到403 Forbidden

如果没有Artifactory,我将定义多个存储库,如下所示:

repositories {
  // other repos...
  maven { url 'http://my-artifactory/releases' }
  maven { url 'http://my-artifactory/snapshots' }
}

但是当我包含Artifactory插件时,似乎 repositories 闭包要么被忽略要么被切割了 - 类似于上面的示例,没有 resolve 闭包,Gradle似乎只尝试从 http://my-artifactory/snapshots 库获取依赖项,并在尝试查找发布依赖项时失败(出现 409冲突)。

那么 - 我错过了什么?我应该要求具有Artifactory管理员权限的人创建一个新的虚拟存储库,将 libs-release libs-snapshot 组合起来吗?还是其他什么?


我面临着同样的问题。你找到一个没有虚拟代码库的解决方案了吗? - YishaiG
1
不是真的;我现在已经离开了那份工作(这总是解决问题的最简单方法 :)),但从记忆中,我认为我们放弃了Artifactory插件,只是使用了Gradle的标准存储库功能,就像drorb的答案的最后一段建议的那样。 - DaveyDaveDave
在我的项目中,似乎这取决于Maven存储库在文件中编写的顺序。如果我想解析发布版本,我必须将发布存储库放在顶部,如果我想使用快照版本构建,则必须将快照存储库放在顶部。这不是一个真正的解决方案。 - 最白目
2个回答

2
分辨率存储库可用于覆盖所有其他存储库定义,并确保所有工件都从中央存储库解析。
这个中央仓库通常是Artifactory中的虚拟仓库。使用虚拟仓库有许多好处,例如它允许您控制可以解决哪些工件(通过将仓库添加/删除到虚拟仓库中),而不会更改构建脚本中使用的URL。
分辨率存储库的另一个用途是在插件用于将构建信息发布到Artifactory时。构建信息的一部分是收集构建过程中解决的所有依赖项的列表。
请注意,这是一项可选功能。您仍然可以继续使用常规Gradle的存储库配置方式。

0

你收到了一个 409 冲突 的错误,因为有人配置了你的 artifactory 拒绝在快照仓库上发布请求。虚拟仓库是最简单的解决方案,因为它可以聚合而不必应用这些规则。

/repo 是另一篇帖子中提到的自定义仓库。除非有人在你的 artifactory 环境中明确创建了它,否则它将不存在。


有趣的是,在另一个问题中,回答者说/repo是预定义的,但无论如何都不重要。你说“有人配置了你的Artifactory以拒绝在快照存储库上发布请求”- 你知道这个设置在哪里记录,或者有一个我可以搜索的有用名称吗?我在Artifactory文档中找不到它。 - DaveyDaveDave
1
为了澄清上述问题,repo仓库是默认提供的,但根据Artifactory文档,它被禁用了。 - DaveyDaveDave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接