SBT在本地Maven存储库中找不到文件


74

我在本地存储库中的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文件在project / build中添加了路径,http://code.google.com/p/simple-build-tool/wiki/LibraryManagement中所述

“如果将sbt添加为资源库,它可以搜索您的本地Maven资源库:”

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

这使sbt在本地存储库中看起来。之前没有。

因此,scala文件如下所示:

import sbt._

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

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

}

(我对Path.userHome进行了硬编码,以排除可能的错误原因。正如预期的那样,它什么都没有改变)。


1
您必须将本地Maven存储库添加到您的build.sbt
leedm777

存储库已添加,否则脚本将不会在其中查找文件。
Ixx 2012年

告诉sbt查找依赖项的行如何显示?如果您有类似...->默认值的内容,请从此处删除默认值。
fmpwizard,2012年

实际上我没有使用build.sbt。我使用的是scala文件,如code.google.com/p/simple-build-tool/wiki/LibraryManagement中所述。编辑了我的帖子,并提供了更多详细信息。
Ixx 2012年

1
ixx:那是SBT 0.7.x,它是旧版本。如果可能,您应该更新到[SBT 0.11.x])github.com/harrah/xsbt/wiki)。
leedm777

Answers:


63

在说明file:符后面需要三个斜杠。这是因为在第二个和第三个斜杠之间,您有一个可选的主机名。维基百科file:URL的解释很好

您遇到了问题,因为典型的"file://"+Path.userHome+"/.m2/repository"假设模式是Unix文件系统,其中路径以开头/,不包含:,并且通常不包含空格。

要拥有在Windows和Linux / Unix上都可以使用的非硬编码路径,请使用:

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

不与已定义的项目,并且添加到项目也不起作用
pferrel

141

只需在build.scala或build.sbt文件中添加此行

resolvers += Resolver.mavenLocal

2
那是哪个sbt?我将其与0.13.11一起使用,并且效果很好。
marios

6
resolvers in Global := Resolver.mavenLocal为我工作。
Retronym

天哪,我已经花了一个小时寻找这个完美的解决方案!Thx
Hartmut P.

@retronym,我想您的意思是“全局解析器+ = Resolver.mavenLocal”
Ben McCann

1
对于SBT 1.3.x,它是ThisBuild / resolvers += Resolver.mavenLocal
antex

21

为了使它适用于新版本的sbt,请在build.sbt中添加以下内容:

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

1
不管我做什么,在进行sbt编译时仍然会收到此错误:[警告] :::::::::::::::::::::::::::::::: ::::::::::::::: [警告] ::未解决的依赖:: :: [警告] :::::::::::::::::::::::: :::::::::::::::::::::: [警告] :: com.sanoma.cda#maxmind-geoip2-scala_2.11; 1.3.2:找不到[警告] ::::::::::::::::::::::::::::::::::::::::::::::: [:]禁止跟踪:运行last :update获取完整输出。[错误](:update)sbt.ResolveException:未解决的依赖项:com.sanoma.cda#maxmind-geoip2-scala_2.11; 1.3.2:找不到
bashan 2015年

我曾经用过resolvers in Global += "Local Maven Repository" at "file://" + Path.userHome + "/.m2/repository"
卡洛斯·费雷拉

3

当您定义了项目时要当心,您需要在设置中包括解析器。不会识别全局解析器。

例:

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

不适用于我,尽管可能与项目有关
pferrel

1
谢谢戴因,它奏效了。向commonSettings添加了解析程序,现在所有定义的项目都可以查看本地Maven存储库中的依赖项。
raevilman
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.