SBT中未解决的依赖关系:找不到常春藤文件

时间:2016-06-08 00:05:28

标签: scala sbt ivy

我有一个SBT项目,它使用内部Nexus存储库来获取它的一些依赖项。当我运行update时,我看到以下警告消息:

[info] Resolving foo.bar.baz#foobar;2.0.1
...
[debug]     The Repo of Interest: no ivy file found for foo.bar.baz#foobar;2.0.1
[warn]  module not found: foo.bar.baz#foobar;2.0.1
[warn] ==== local: tried
...
... several irrelevant repositories omitted...
...
[warn] ==== The Repo of Interest: tried
[warn]   http://internal.url.com/nexus/content/repositories/releases/foo/bar/baz/foobar/2.0.1/foobar-2.0.1.pom
...
... some other repositories omitted...
...

上面显示的网址似乎应该可以使用,因为我可以在浏览器中打开pom而不会出现问题(请注意,我已修改了网址,因此您必须接受我的说法,即它有效)。 更令人困惑的是,我在尝试构建某些机器时只看到了这个问题。如何开始调试此问题?是否有任何额外的日志记录可以让我了解为什么SBT / Ivy忽略位于上述URL的POM?

更新:我的build.sbt定义了解析器,如下所示:

resolvers := Seq(
  ...,
  "The Repo of Interest" at "http://internal.url.com/nexus/content/repositories/releases",
  ...
)

http://internal.url.com/nexus/content/repositories/releases/foo/bar/baz/foobar/2.0.1文件夹还有pom,jar,sources jar以及所有这些文件的关联md5和sha1。 pom文件看起来像:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>foo.bar.baz</groupId>
  <artifactId>foobar</artifactId>
  <version>2.0.1</version>
  <dependencies>
    ...
  </dependencies>
</project>

更新#2:构建似乎只在其他机器上运行,因为它们已经在~/.ivy2/cache/foo/bar/baz/foobar/jars下缓存了相关jar的副本。

更新#3:仔细查看日志记录后,我相信The Repo of Interest: no ivy file found for foo.bar.baz#foobar;2.0.1是真正的错误消息

3 个答案:

答案 0 :(得分:1)

感谢您的所有建议!事实证明,在我的特定情况下,答案很简单:存储库URL需要以https而不是http开头。在尝试使用Coursier's command line tool手动获取jar之后,我碰巧偶然发现了这个解决方案:

coursier fetch -r http://internal.url.com/nexus/content/repositories/releases foo.bar.baz:foobar:2.0.1

然后产生的输出看起来像:

Error:
  foo.bar.baz:foobar:2.0.1
    not found: /some/path/.ivy2/local/foo.bar.baz/foobar/2.0.1/ivys/ivy.xml
    not found: https://repo1.maven.org/maven2/foo/bar/baz/foobar/2.0.1/foobar-2.0.1.pom
    checksum format error: ...

似乎很奇怪,没有not found: http://internal.url.com/nexus/content/repositories/releases...行,我碰巧认为URL实际上应该以{{1​​}}开头。

答案 1 :(得分:0)

确保可以通过网络上的所有计算机访问nexus服务器。同时尝试强制更新您的仓库。在过去,我遇到了nexus文件夹中有pom文件但没有关联的jar文件的问题,所以请检查以确保存在与pom相关联的工件

答案 2 :(得分:0)

我使用sbt update然后立即publish修复了它。参考:https://github.com/sbt/sbt/issues/3496