2016-06-08 251 views
0

我有一個SBT項目,它使用內部的Nexus存儲庫來獲取它的一些依賴關係。當我運行update,我看到下面的警告消息:SBT中未解決的依賴項:找不到ivy文件

[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... 
... 

上面顯示的URL看起來像它應該工作,因爲我可以在瀏覽器中打開POM沒有問題(請注意,我已經修改了網址,以便您將不得不承認我的話,它的作品)。 更令人困惑的是,我只在試圖在某些機器上構建時纔看到這個問題。 即使開始調試此問題,我該如何解決?有沒有額外的日誌記錄可以讓我瞭解爲什麼SBT/Ivy忽略位於上述URL的POM?

UPDATE:我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,罐子,來源罐子,爲所有這些文件的相關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下高速緩存相關罐子的副本。

更新#3:着眼於更緊密地記錄了一點之後,我相信The Repo of Interest: no ivy file found for foo.bar.baz#foobar;2.0.1是真正的錯誤消息

+0

您能否看看您的「The Repo of Interest」解析器的配置。最典型的問題:(1)解析器工件路徑配置不正確,(2)解析器不處於Maven兼容模式。你可以使用sbt控制檯來查看你的解析器 - 檢查解析器 –

+0

我已經更新了這個問題,以顯示如何在build.sbt中定義解析器。我相信它被定義爲使用Maven格式,這就是爲什麼它首先搜索pom文件的原因。 「檢查解析器」沒有提供太多細節。它顯示:'[info]設置:scala.collection.Seq [sbt.Resolver] =列表(...,感興趣的回購:http://internal.url.com/nexus/content/repositories/releases,。 ..)' –

+1

請勿使用':='。您覆蓋所有設置。只需附加新的解析器:Global ++ = Seq(...)中的解析器或Global + = ...中的解析器。 –

回答

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...線,我只是碰巧認爲,也許該網址實際上應該從https開始。

0

確保關係服務器是通過網絡上的所有計算機訪問。也嘗試強制更新您的回購。在過去,我遇到了nexus文件夾中存在pom文件的問題,但沒有關聯的jar文件,因此請檢查以確保存在與pom相關的工件。

+0

你能澄清你的意思嗎「強制更新你的回購?」 –