2012-05-27 73 views
61

我遇到了在我的本地存儲庫中的maven依賴項的問題。SBT在本地maven存儲庫中找不到文件,儘管它存在

SBT找不到它。已經設置日誌級別來調試,但沒有得到任何新東西。

這些文件位於存儲庫中。我從控制檯複製粘貼路徑到文件資源管理器,他們在那裏。

輸出:

[debug]   trying file://c:/Users/userz/.m2/repository/com/twitter/naggati/2.0.0/naggati-2.0.0.pom 

[debug]     tried file://c:/Users/userz/.m2/repository/com/twitter/naggati/2.0.0/naggati-2.0.0.pom 

[debug]   Local Maven Repository: resource not reachable for com/twitter#naggati;2.0.0: res=file://c:/Users/userz/.m2/repository/com/twitter/naggati/2.0 
.0/naggati-2.0.0.pom 

[debug]   trying file://c:/Users/userz/.m2/repository/com/twitter/naggati/2.0.0/naggati-2.0.0.jar 

[debug]     tried file://c:/Users/userz/.m2/repository/com/twitter/naggati/2.0.0/naggati-2.0.0.jar 

[debug]   Local Maven Repository: resource not reachable for com/twitter#naggati;2.0.0: res=file://c:/Users/userz/.m2/repository/com/twitter/naggati/2.0 
.0/naggati-2.0.0.jar 

[debug]   Local Maven Repository: no ivy file nor artifact found for com.twitter#naggati;2.0.0 

編輯:我使用Scala的文件在工程/建造http://code.google.com/p/simple-build-tool/wiki/LibraryManagement

「SBT描述可以搜索你的本地倉庫,如果你將其添加爲添加的路徑一個存儲庫:「

val mavenLocal = "Local Maven Repository" at "file://"+Path.userHome+"/.m2/repository" 

這使sbt看起來在本地存儲庫。之前沒有。

所以斯卡拉文件看起來像這樣:

import sbt._ 

class Foo(info: ProjectInfo) extends DefaultProject(info) { 

val mavenLocal = "Local Maven Repository" at "file://c:/Users/userz/.m2/repository" 

} 

(我硬編碼Path.userHome排除可能出現的錯誤的原因正如預期並沒有改變任何東西。)。

+0

你必須在本地Maven回購添加到您的build.sbt – leedm777

+0

信息庫中添加,否則該腳本將不看那裏的文件。 – Ixx

+0

告訴sbt尋找你的依賴的那一行是如何的?如果您有類似... - >默認設置,請從中刪除默認設置。 – fmpwizard

回答

57

您需要file:符後三個斜槓。這是因爲在第二個和第三個斜槓之間,你有一個可選的主機名。 Wikipedia有一個很好的解釋file: URL的

您所遇到的問題,因爲"file://"+Path.userHome+"/.m2/repository"典型模式假定一個Unix文件系統,其中的路徑始於/,不含:,通常不包含空格。

若要在Windows和Linux/Unix,使用這兩種方式的非硬編碼路徑:

"Local Maven" at Path.userHome.asFile.toURI.toURL + ".m2/repository" 
+0

沒有定義項目,添加到項目中也不起作用 – pferrel

+0

在mac上解決了我的問題。 – Daniel

21

爲了得到這個爲SBT的較新版本的工作,添加以下build.sbt:

resolvers += "Local Maven Repository" at "file:///"+Path.userHome+"/.m2/repository" 
+1

3個斜線做的伎倆! – Esk

+1

不管我做什麼,我仍然得到這個錯誤做SBT編譯時: [提醒] :::::::::::::::::::::::::::::: :::::::::::::::: [警告] ::未解決的依賴:: [警告] :::::::::::::::::::: :::::::::::::::::::::::::: [警告] :: com.sanoma.cda#的MaxMind-geoip2-scala_2.11; 1.3.2:沒有發現 [警告] :::::::::::::::::::::::::::::::::::::::::::: :: [跟蹤]堆棧跟蹤被抑制:最後運行*:更新完整的輸出。 [錯誤](*:更新)sbt.ResolveException:未解析的依賴性:com.sanoma.cda#的MaxMind-geoip2-scala_2.11; 1.3.2:找不到 – bashan

+1

不爲我工作 – pferrel

110

只是在build.scala或build.sbt文件中加入這一行

resolvers += Resolver.mavenLocal 
+1

這不會爲我工作與最新的SBT。 – Dyin

+2

這是什麼?我用它0.13.11,它工作得很好。 – marios

+0

不與項目定義 – pferrel

3

當心,當你有一個公關oject定義,您需要在設置中包含解析器。全球解析器不會被識別。

例子:

lazy val core = (project in file("core")). 
    settings(commonSettings: _*). 
    settings(
    resolvers += Resolver.mavenLocal, 
    name := "Core", 
    libraryDependencies := coreDependencies 
) 
+0

對我不起作用,雖然它可能與項目有關 – pferrel

+1

感謝Dyin,它工作。 爲commonSettings添加了解析器,現在所有已定義的項目都可以查看本地maven回購以瞭解依賴關係。 – raevilman

相關問題