Gradle如何与共享的Ivy或Maven存储库集成?

Gradle如何与共享的Ivy或Maven存储库集成?,maven,repository,gradle,ivy,Maven,Repository,Gradle,Ivy,我一直在阅读Gradle及其存储库支持功能。文件表明它支持常春藤或Maven回购协议。我并不完全清楚这一点的含义 就Maven回购而言,我认为我的理解更加完整。在构建时,本地存储库(如Nexus或Artifactory)将从MavenCentral缓存所需的公共依赖项。对于发布,Gradle将为项目生成POM.xml,您可以将私有工件发布回本地存储库我的理解正确吗?我想控制正在使用的公共依赖项,同时纠正公共MavenCentral POM中的错误 对于艾薇,我有点困惑。首先,共享常春藤回购看起来

我一直在阅读Gradle及其存储库支持功能。文件表明它支持常春藤或Maven回购协议。我并不完全清楚这一点的含义

就Maven回购而言,我认为我的理解更加完整。在构建时,本地存储库(如Nexus或Artifactory)将从MavenCentral缓存所需的公共依赖项。对于发布,Gradle将为项目生成POM.xml,您可以将私有工件发布回本地存储库我的理解正确吗?我想控制正在使用的公共依赖项,同时纠正公共MavenCentral POM中的错误

对于艾薇,我有点困惑。首先,共享常春藤回购看起来像什么?它只是一个通过SSH、SFTP、HTTP等托管的远程目录树吗?这在混合Windows/Unix环境中有效吗Gradle如何将公共依赖项和构建的工件移动到共享的Ivy repo中?Jenkins是否也可以执行此步骤,如何?当定义了新的公共依赖项并且需要将它们移动到共享的常春藤回购协议中时,是否需要额外的构建步骤,或者这是无缝完成的


最后,假设两个模型的特征基本相同。维护Jenkins build机器的解决方案是什么?

您对Gradle中Maven支持的理解是正确的。您可以完全控制依赖项及其来源(Gradle没有任何硬编码的存储库,因此您可以使用而不是Maven Central,例如,纠正的错误更少)

常春藤的依赖管理是相似的。常春藤有自己的布局(请参阅“知识库支持”),在网络上有少量的公共常春藤知识库(例如)。由于Ivy很适合Maven存储库,因此大多数Ivy用户只使用Maven Central和/或Bintray

Ivy和Maven之间的主要区别不在于存储库格式,而在于元数据格式。Ivy使用Ivy.xml(尽管名称不是必须的)代替pom.xml,xml模式不同。
Gradle支持这两种格式,可以从pom.xml和ivy.xml读取可传递依赖项,并可以为项目生成元数据,并以两种格式将其部署到存储库。

类似的问题:显然,“完全控制”意味着您必须编写自己的插件来排除可传递项?我不认为Gradle有任何接近控制粒度的地方可以称之为“完整”。如果这是真的,我可以很容易地排除一个及物动词,只需为该项插入一个排除项,即使它埋得4或5深。。。然后是BOM的。IMHO对BOM的不支持意味着总体上对Maven的支持不足,因为Maven似乎正朝着这个方向努力。“完全控制”意味着Gradle将只使用Gradle文件中声明的存储库。如果排除可传递依赖项,您可以这样做。如果你根本不想在任何地方使用及物动词,你可以很容易地排除它。我们遇到的具体问题是在发生冲突时自动升级功能。虽然我同意这是正确的方法,但当您迁移一个大型项目(数周时间来排序依赖项)时,如果您试图确保Maven和Gradle之间的*.war文件是相同的,则会带来麻烦。它们在迁移后可能会有所不同,但在迁移过程中不会有所不同。在本例中,您最终会“剥洋葱皮”,以尝试排除该特定依赖项。