2012-05-27 43 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

相关问题