SBT doesn't find file in local maven repository although it's there

39,882

Solution 1

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"

Solution 2

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

resolvers += Resolver.mavenLocal

Solution 3

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"

Solution 4

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
  )
Share:
39,882

Related videos on Youtube

User
Author by

User

Updated on July 05, 2022

Comments

  • User
    User almost 2 years

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

    • leedm777
      leedm777 almost 12 years
      You have to add the local maven repo to your build.sbt
    • User
      User almost 12 years
      The repository is added, otherwise the script would not look there for the files.
    • fmpwizard
      fmpwizard almost 12 years
      How is the line that tells sbt to look for your dependency? If you have something like ... -> default, remove default from there.
    • User
      User almost 12 years
      Actually I'm not using build.sbt. I'm using a scala file like described in code.google.com/p/simple-build-tool/wiki/LibraryManagement. Edited my post with more details.
    • leedm777
      leedm777 almost 12 years
      ixx: That's SBT 0.7.x, and it's the legacy version. You should update to [SBT 0.11.x])github.com/harrah/xsbt/wiki), if possible.
  • bashan
    bashan about 9 years
    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
  • marios
    marios over 7 years
    Which sbt is that? I used it with 0.13.11 and it works just fine.
  • pferrel
    pferrel over 6 years
    doesn't work for me, though it may have something to do with projects
  • pferrel
    pferrel over 6 years
    not with projects defined and adding to the project doesn't work either
  • raevilman
    raevilman over 6 years
    Thanks Dyin, It worked. Added resolver to commonSettings, now all defined projects can look into local maven repo for dependencies.
  • retronym
    retronym over 6 years
    resolvers in Global := Resolver.mavenLocal works for me.
  • Hartmut Pfarr
    Hartmut Pfarr over 5 years
    OMG I've searched an hour for this perfect solution! Thx
  • Ben McCann
    Ben McCann about 5 years
    @retronym, I think you meant "resolvers in Global += Resolver.mavenLocal"
  • slugmandrew
    slugmandrew over 4 years
    Amazing that it's such a simple solution. Cheers!
  • antex
    antex over 4 years
    For SBT 1.3.x it's ThisBuild / resolvers += Resolver.mavenLocal
  • Carlos Ferreyra
    Carlos Ferreyra almost 4 years
    I used resolvers in Global += "Local Maven Repository" at "file://" + Path.userHome + "/.m2/repository"