使用常春藤更改常春藤中的默认存储库

Posted

技术标签:

【中文标题】使用常春藤更改常春藤中的默认存储库【英文标题】:Change default repository in ivy for everything using ivy 【发布时间】:2018-07-07 15:42:27 【问题描述】:

我有一个环境,其中(基本上)任何构建的所有依赖项都需要从我们的工件存储库中提取,同时许多第 3 方库需要从源代码构建(通常具有非常小的自动更改)并存储在存储库中以用作将来的依赖项。这样做的原因不在我的控制范围内,也无法更改。我正在寻找将这些第 3 方库从 github 或任何地方提取源代码后指向我们的存储库的最佳方法,从使用 ivy 的任何内容开始(并非所有内容都使用 ivy,至少也使用 maven 和 gradle,但 ivy被大量使用,所以从那里开始)。

我已经阅读了有关更改一个项目(Here 和其他站点)的默认存储库的常春藤选项的相当多的内容,但我想尝试做一个更广泛的解决方案,这可以节省大量时间从长远来看。我想到的一种选择是修改 ivysettings-public.xml 文件,以便默认的 ivy 公共存储库实际上是我们的工件。我看到的两个问题是,一个项目可能会设置一个特定的存储库以在默认的公共存储库之前进行检查,尽管我不知道这有多普遍。这也可能需要从源头构建常春藤?不是不可能完成的任务,只是额外的工作,尽管我再次不确定它是否会。但我很确定我知道(或很容易弄清楚)如何执行此解决方案所需的操作。

另一个可能的选择是让某种类型的模块或中间人附加到 ivy 并拦截存储库请求,将它们重定向到我们的工件。这个我实际上不确定它是否可能,但似乎它可能是。

我知道可能有一些环境变量或 ANT 属性可以在构建调用之前设置,它们也可能起作用(来自与以前相同的链接)。这不是很理想,但仍然比为每个项目更改 ivysettings.xml 文件要好得多。

基本上,这样做的最终目标是我们可以从 github 中提取一个使用 ivy 的项目,在不更改代码的情况下构建它,并让所有依赖项调用查看我们的工件存储库。这也可以通过使用 maven 或 gradle 等的东西来完成,但似乎一个适合所有解决方案的解决方案要么是不可能的,要么是更多的工作,然后它是值得的(虽然我总是错的),所以从常春藤开始。我觉得我的第一个想法是节省时间和可行性的最佳组合,但我知道的足以知道它可能有更好的选择。

【问题讨论】:

【参考方案1】:

您无需担心默认存储库。我看到在那个页面中,您链接的术语可能会让常春藤新手感到困惑。这些只是一些类型的存储库,但您无需担心。

您只需在 ivysettings.xml 中设置一个chained resolver。在该链接解析器中,您可以根据需要添加任意数量的(子)解析器,其中一个可以是您的工件,另一个可以是一些公共存储库(如 maven Central),第三个是一些用于测试的本地文件系统解析器等......无论何时使用ivy,告诉它使用这个链式解析器,或者将它设为 ivysettings 中的默认解析器。

当然,在发布您的 ivy 模块时,请确保使用其中一个子/子解析器,我猜您会使用指向您的工件中的 ivy 存储库。

【讨论】:

你说的是ivy本身使用的主ivysettings文件,还是每个项目的ivysettings文件?你是对的,我是 ivy 的新手,但我已经阅读了一些内容,认为我了解如何为 ivy 项目设置链式解析器,或者如何将 iBiblio 用于特定存储库,以及其他选项。但我希望找到一个选项,允许任何基于常春藤的项目使用我们的人工制品而无需修改。如果您正在谈论核心 ivysettings.xml 文件,那么这确实回到了我可以在不从源代码构建常春藤的情况下修改它吗? 没有主要的或核心的 ivy setting.xml 填充。当然,ivy 使用了一些默认设置(也许它们存储在与 ivy 本身一起分发的 ivy 文件中,或者例如 IDE)。您需要做的只是编写一个 ivy settings.xml 并使用它(例如来自 ant) 因此,如果我以我想要的方式编写一个 ivysettings 文件,那么我可以强制它用于形成 ant 构建调用(“ant package”等)还是我必须替换项目设置文件与我自己的第一个?例如,在solr 中有***常春藤设置.xml 和默认嵌套常春藤设置.xml(都在 lucene 文件夹下)。看起来如果我只是用我自己的同名文件替换第二个文件就可以了。但我不能替换第一个,因为它还指向版本信息以及存储库信息。 (续) (来自上一个)所以在这种情况下,在找到正确的文件后可以直接替换文件,但我不确定这是否总是有效。在每个 ivy 项目中找到要替换的文件是可以的,不会增加太多工作,但是如果文件可能有其他需要的代码,那就有问题了,因为每个拉取的项目都需要有一个单独创建的 ivy 文件我希望避免的。 好的,所以每个项目都有自己的 ivy.xml(模块描述符),它必须。但是 ivysettings.xml 可用于所有项目。例如,我有 N 个 java 项目,它们都使用相同的设置。我只是创建了一个环境变量,在其中设置了 ivysettings.xml 的路径,然后在我的每个 build.xmls 中使用 ivysettings ant 任务。所以是的,你可以使用或强制使用任何 ivyseetings。在 solr 示例中,它们具有用于在内部发布(如您需要的内容)和用于发布到 mvncentral(例如,TL​​DR)的 ivysettings,但您不需要所有这些 --next 评论

以上是关于使用常春藤更改常春藤中的默认存储库的主要内容,如果未能解决你的问题,请参考以下文章

本地存储库的好常春藤教程? [关闭]

请参阅 VSTS 中的一个文件夹,该文件夹包含我的项目构建文件中的本地常春藤存储库

使用 maven 存储库作为本地常春藤缓存

Gradle - 将第三方依赖项安装到本地常春藤存储库中

解决常春藤的最佳链

常春藤安装任务第一次失败并出现 JSCH SFTP 错误 4,但在后续尝试中成功