81

I'm having problems with a maven dependency which is in my local respository.

SBT can't find it. Already set log level to debug, but not getting anything new.

The files are in the repository. I copy paste paths from the console to file explorer and they are there.

The output:

[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

Edit: I added the path using scala file in project/build like described in http://code.google.com/p/simple-build-tool/wiki/LibraryManagement

"sbt can search your local Maven repository if you add it as a repository:"

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

That made sbt look in the local repository. Before it didn't.

So the scala file looks like this:

import sbt._

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

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

}

(I hardcoded Path.userHome to exclude possible error reason. As expected it didn't change anything).

User
  • 31,811
  • 40
  • 131
  • 232
  • 1
    You have to add the local maven repo to your build.sbt – leedm777 May 27 '12 at 16:12
  • The repository is added, otherwise the script would not look there for the files. – User May 27 '12 at 17:48
  • How is the line that tells sbt to look for your dependency? If you have something like ... -> default, remove default from there. – fmpwizard May 27 '12 at 19:01
  • Actually I'm not using build.sbt. I'm using a scala file like described in http://code.google.com/p/simple-build-tool/wiki/LibraryManagement. Edited my post with more details. – User May 27 '12 at 19:16
  • 1
    ixx: That's SBT 0.7.x, and it's the legacy version. You should update to [SBT 0.11.x])https://github.com/harrah/xsbt/wiki), if possible. – leedm777 May 28 '12 at 01:40

4 Answers4

159

Just add this line in the build.scala or build.sbt file

resolvers += Resolver.mavenLocal
thefourtheye
  • 233,700
  • 52
  • 457
  • 497
Ben Rhouma Zied
  • 2,473
  • 3
  • 19
  • 29
65

You need three slashes after the file: specifier. This is because between the second and third slash, you have an optional hostname. Wikipedia has a good explanation of file: URL's

You're having a problem because the typical pattern of "file://"+Path.userHome+"/.m2/repository" assumes a Unix filesystem, where the path begins with a /, contains no :, and usually contains no spaces.

To have a non-hardcoded path that works on both Windows and Linux/Unix, use:

"Local Maven" at Path.userHome.asFile.toURI.toURL + ".m2/repository"
Tom Wadley
  • 121,983
  • 1
  • 26
  • 29
leedm777
  • 23,444
  • 10
  • 58
  • 87
21

To get this to work for newer versions of sbt, add the following to build.sbt:

resolvers += "Local Maven Repository" at "file:///"+Path.userHome+"/.m2/repository"
Marius
  • 57,995
  • 32
  • 132
  • 151
  • 1
    No matter what I do I still get this error when doing sbt compile: [warn] :::::::::::::::::::::::::::::::::::::::::::::: [warn] :: UNRESOLVED DEPENDENCIES :: [warn] :::::::::::::::::::::::::::::::::::::::::::::: [warn] :: com.sanoma.cda#maxmind-geoip2-scala_2.11;1.3.2: not found [warn] :::::::::::::::::::::::::::::::::::::::::::::: [trace] Stack trace suppressed: run last *:update for the full output. [error] (*:update) sbt.ResolveException: unresolved dependency: com.sanoma.cda#maxmind-geoip2-scala_2.11;1.3.2: not found – bashan Feb 06 '15 at 21:35
  • I used `resolvers in Global += "Local Maven Repository" at "file://" + Path.userHome + "/.m2/repository"` – Carlos Ferreyra May 30 '20 at 23:35
3

Watch out when you have a project defined, you'll need to include the resolver in the settings. Global resolver will not be identified.

Example:

lazy val core = (project in file("core")).
  settings(commonSettings: _*).
  settings(
    resolvers += Resolver.mavenLocal,
    name := "Core",
    libraryDependencies := coreDependencies
  )
Dyin
  • 5,815
  • 8
  • 44
  • 69
  • doesn't work for me, though it may have something to do with projects – pferrel Aug 05 '17 at 22:36
  • 1
    Thanks Dyin, It worked. Added resolver to commonSettings, now all defined projects can look into local maven repo for dependencies. – raevilman Oct 06 '17 at 07:27