我如何依赖Gradle中Artifactory的发布和快照?

我如何依赖Gradle中Artifactory的发布和快照?,gradle,artifactory,Gradle,Artifactory,我觉得我缺少了Artifactory的“虚拟回购”概念。我对Artifactory和Gradle都是新手,以前使用过Nexus和Maven,我不记得以前遇到过此类问题 我觉得我有一个相当正常的场景,在这个场景中,我主要需要发布依赖项,在开发过程中需要一些快照依赖项 发布依赖项可从虚拟repo“libs release”(其中包括“libs release local”,以及其他repo)中获得,快照可从“libs snapshot”中获得 我所困惑的是我应该如何在Gradle中用Artifact

我觉得我缺少了Artifactory的“虚拟回购”概念。我对Artifactory和Gradle都是新手,以前使用过Nexus和Maven,我不记得以前遇到过此类问题

我觉得我有一个相当正常的场景,在这个场景中,我主要需要发布依赖项,在开发过程中需要一些快照依赖项

发布依赖项可从虚拟repo“libs release”(其中包括“libs release local”,以及其他repo)中获得,快照可从“libs snapshot”中获得

我所困惑的是我应该如何在Gradle中用Artifactory插件来定义它?从文档和示例中,我认为我需要如下内容:

artifactory {
  contextUrl = 'http://my-artifactory/artifactory'

  resolve {
    repository {
      repoKey = 'all-my-libs'
    }
  }
}
但这感觉是不对的——如果我只是把它们放在一起使用,那么单独的回购协议又有什么意义呢?回答中的评论支持了我的担忧。这个问题涉及到
/repo
虚拟存储库,由于某些原因,我无法使用它。如果我尝试使用它,我会得到一个禁止的
403

如果没有Artifactory,我会定义多个存储库,如:

repositories {
  // other repos...
  maven { url 'http://my-artifactory/releases' }
  maven { url 'http://my-artifactory/snapshots' }
}
但是当我包括Artifactory插件时,似乎
存储库
闭包被忽略了,或者以某种方式被破坏了——与上面的例子类似,没有
解析
闭包,Gradle似乎只是试图从
获取依赖关系http://my-artifactory/snapshots
repo,并且在尝试查找版本依赖项时失败(与
409冲突


那么,我错过了什么?我是否应该要求拥有Artifactory管理员权限的人员创建一个新的虚拟回购协议,将
libs release
libs snapshot
结合起来?还是别的什么?

您遇到了
409冲突
,因为有人将您的工件配置为拒绝快照repo上的发布请求。虚拟回购是最简单的解决方案,因为它可以聚合而不必应用这些规则


/repo
是您提到的其他帖子中创建的自定义回购。除非有人在您的artifactory env中显式创建它,否则它将不存在。

可以使用解析存储库来覆盖所有其他存储库定义,并确保所有工件都是从中央存储库解析的。
这个中央存储库通常是一个人工制品。使用虚拟存储库有很多好处,例如,它允许您控制可以解析哪些工件(通过从虚拟存储库中添加/删除存储库),而无需更改构建脚本中使用的URL

解析存储库的另一个用途是当插件用于发布到Artifactory时。生成期间解析的所有依赖项的列表将作为生成信息的一部分进行收集


请注意,这是一个可选功能。您可以继续使用常规的Gradle方式来配置存储库。

有趣的是,在另一个问题中,回答者说
/repo
是预定义的,但这两种方式都没什么大不了的。您说“有人将您的工件配置为拒绝快照repo上的发布请求”-您知道该设置记录在哪里,或者我可以搜索一个有用的名称吗?我在Artifactory文档中的任何地方都找不到它。为了澄清上述问题,默认情况下提供了
repo
存储库,但该存储库已被禁用。我面临着同样的问题。你找到没有虚拟存储库的解决方案了吗;我现在已经离开了那份工作(这永远是解决问题的最简单的方法:),但从内存来看,我认为我们放弃了Artifactory插件,只使用了Gradle的标准Respositions功能,正如drorb答案的最后一段所建议的,在我的项目中,这似乎取决于maven存储库在文件中的写入顺序。如果我想解析一个发布版本,我必须将发布repo放在最上面,如果我想使用快照版本进行构建,我必须将快照repo放在最上面。这不是一个真正的解决办法。