我觉得我错过了Artifactory'虚拟回购'概念。我之前使用过Nexus和Maven,对Artifactory和Gradle都很陌生,而且我不记得曾经遇到过这类问题。
我觉得我有一个相当正常的场景,我需要主要是发布依赖项,在开发期间有一些快照依赖项。
版本依赖关系可以从虚拟仓库和libs-release' (包括' libs-release-local',以及其他repos),快照可以在' libs-snapshot'。
中找到。我感到困惑的是我应该如何使用Artifactory插件在Gradle中定义它?从文档和示例中,我认为我需要类似的东西:
artifactory {
contextUrl = 'http://my-artifactory/artifactory'
resolve {
repository {
repoKey = 'all-my-libs'
}
}
}
但这感觉不对 - 如果我把它们全部混在一起使用它们,那么单独回购中的要点是什么?对this question的回答中的评论支持了我的担忧。该问题涉及/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
repo获取依赖项,并在尝试查找版本依赖项时失败(使用409 Conflict
)。
所以 - 我错过了什么?我应该要求具有Artifactory管理员权限的人创建一个组合libs-release
和libs-snapshot
的新虚拟仓库吗?或其他什么?
答案 0 :(得分:2)
可以使用解析存储库来覆盖所有其他存储库定义,并确保从中央存储库中解析所有工件。
这个中央存储库通常是Artifactory中的virtual repository。使用虚拟存储库有许多好处,例如,它允许您控制哪些工件可以解析(通过在虚拟机中添加/删除存储库),而无需更改构建脚本中使用的URL。
解决方案存储库的另一个用途是当插件用于将build information发布到Artifactory时。构建期间解析的所有依赖项的列表将作为构建信息的一部分收集。
请注意,这是一项可选功能。您可以继续使用常规的Gradle方式来配置存储库。
答案 1 :(得分:0)
您获得了409 Conflict
,因为有人将您的工件配置为拒绝快照存储库上的发布请求。虚拟仓库是最简单的解决方案,因为它可以在没有这些规则的情况下进行汇总。
/repo
是您提及的其他帖子中创建的自定义回购。除非有人在你的神器环境中明确创建它,否则它不会存在。