sbt/ivy 无法解析通配符 ivy 对文件系统解析器的依赖

Posted

技术标签:

【中文标题】sbt/ivy 无法解析通配符 ivy 对文件系统解析器的依赖【英文标题】:sbt/ivy failing to resolve wildcard ivy dependencies on a filesystem resolver 【发布时间】:2014-10-15 04:53:04 【问题描述】:

我正在使用~/.sbt/repositories 文件告诉 sbt 0.13.5 要从哪些存储库中检索。该文件仅包含localfile:// 存储库,其自定义布局与标准sbt 非常相似,其中sbtVersionscalaVersion 表示可选字段。

在解决我的项目的依赖项时,我注意到奇怪的行为:

解决确切的依赖关系工作正常 latest.integration 也可以正常工作 x.y.+ 形式的通配符解析没有找到任何东西,而是似乎在搜索文字模式。我收到以下表单错误: [警告] ==== myrepo:试过 [警告] file://path/to/my/repo/myorg/mypackage_2.10/[revision]/ivy-[revision].xml [信息] 正在解决 myorg#mypackage_2.10;2.7.1.+ ... [警告] 未找到模块:myorg#mypackage_2.10;2.7.1.+

如您所见,明确提及 repo 布局模式。

我很困惑,因为解析器除了+ 通配符依赖项之外的任何东西都可以正常工作。我尝试查看 ivy 文档,以确定某些解析器(例如我正在使用的 file:// 解析器)是否没有实现某些类型的依赖解析,但这似乎不是问题,所以我大部分都难住了。知道我可以做些什么来使它工作,或者可能是什么原因造成的?

【问题讨论】:

有趣。可以在github上放一个小的可复现样本吗? github.com/sbt/sbt/issues/2279 【参考方案1】:

过去我遇到过类似的问题。我们有一个或多个要构建的应用程序,所有这些应用程序都使用相同的 Ivy2 缓存。如果我们在这些构建中使用通配符,我们有时会遇到无法正确解析依赖关系的情况。只有当我们使用通配符时才会出现问题。其他一切都很好。

我们发现的问题是在某些情况下 Ivy2 缓存会损坏。一般来说,解决方案是从 Ivy2 缓存中删除有问题的库。然后,如果我们再次运行构建,它就会工作。

我最终发现了一个帖子,它暗示 Ivy2 Cache 上的某些操作不是线程安全的。 IE。在某些情况下,同时运行多个构建可能会损坏缓存。我们最终为所有构建设置了自定义 Ivy Cache 文件夹。这解决了问题。

抱歉,我找不到引导我走这条路的原始帖子,但下面的帖子可能有些相关。

https://groups.google.com/forum/#!topic/simple-build-tool/eCOkACPjm9E https://groups.google.com/forum/#!topic/simple-build-tool/wFXhJcngy9Y

【讨论】:

以上是关于sbt/ivy 无法解析通配符 ivy 对文件系统解析器的依赖的主要内容,如果未能解决你的问题,请参考以下文章

sbt配置文件

sbt 不能正常工作 - 找不到模块:org.scala-sbt

为啥 Ivy 无法解析我的配置

常春藤解决某些用户失败

ivy 无法解析 org.springframework 依赖项

Ivy - 将解析结果输出到 ivy 文件