SBT findet keine Datei im lokalen Maven-Repository, obwohl es dort ist

73

Ich habe Probleme mit einer Maven-Abhängigkeit, die sich in meinem lokalen Repository befindet.

SBT kann es nicht finden. Stellen Sie die Protokollstufe bereits auf Debuggen ein, erhalten Sie jedoch nichts Neues.

Die Dateien befinden sich im Repository. Ich kopiere Einfügepfade von der Konsole in den Datei-Explorer und sie sind da.

Die Ausgabe:

[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

Bearbeiten: Ich habe den Pfad mithilfe der Scala-Datei in project / build hinzugefügt, wie unter http://code.google.com/p/simple-build-tool/wiki/LibraryManagement beschrieben

"sbt kann Ihr lokales Maven-Repository durchsuchen, wenn Sie es als Repository hinzufügen:"

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

Dadurch sah sbt im lokalen Repository aus. Vorher nicht.

Die Scala-Datei sieht also folgendermaßen aus:

import sbt._

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

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

}

(Ich habe Path.userHome fest codiert, um mögliche Fehlerursachen auszuschließen. Wie erwartet hat sich nichts geändert.)

Ixx
quelle
1
Sie müssen das lokale Maven-Repo zu Ihrem build.sbt
leedm777
Das Repository wird hinzugefügt, andernfalls würde das Skript dort nicht nach den Dateien suchen.
Ixx
Wie lautet die Zeile, in der sbt angewiesen wird, nach Ihrer Abhängigkeit zu suchen? Wenn Sie etwas wie ... -> Standard haben, entfernen Sie Standard von dort.
FMMPWizard
Eigentlich benutze ich nicht build.sbt. Ich verwende eine Scala-Datei wie in code.google.com/p/simple-build-tool/wiki/LibraryManagement beschrieben . Bearbeitet meinen Beitrag mit mehr Details.
Ixx
1
ixx: Das ist SBT 0.7.x und es ist die Legacy-Version. Sie sollten nach Möglichkeit auf [SBT 0.11.x]) github.com/harrah/xsbt/wiki ) aktualisieren .
leedm777

Antworten:

62

Sie benötigen drei Schrägstriche nach dem file:Bezeichner. Dies liegt daran, dass Sie zwischen dem zweiten und dritten Schrägstrich einen optionalen Hostnamen haben. Wikipedia hat eine gute Erklärung für file:URLs

Sie haben ein Problem, weil das typische Muster von "file://"+Path.userHome+"/.m2/repository"ein Unix-Dateisystem annimmt, bei dem der Pfad mit a beginnt /, no enthält :und normalerweise keine Leerzeichen enthält.

Verwenden Sie Folgendes, um einen nicht fest codierten Pfad zu erhalten, der sowohl unter Windows als auch unter Linux / Unix funktioniert:

"Local Maven" at Path.userHome.asFile.toURI.toURL + ".m2/repository"
leedm777
quelle
Nicht mit definierten Projekten und das Hinzufügen zum Projekt funktioniert auch nicht
pferrel
141

Fügen Sie diese Zeile einfach in die Datei build.scala oder build.sbt ein

resolvers += Resolver.mavenLocal
Ben Rhouma Zied
quelle
2
Welches sbt ist das? Ich habe es mit 0.13.11 verwendet und es funktioniert einwandfrei.
Marios
6
resolvers in Global := Resolver.mavenLocalfunktioniert bei mir.
Retronym
OMG Ich habe eine Stunde nach dieser perfekten Lösung gesucht! Thx
Hartmut P.
@retronym, ich denke du meintest "Resolver in Global + = Resolver.mavenLocal"
Ben McCann
1
Für SBT 1.3.x ist esThisBuild / resolvers += Resolver.mavenLocal
antex
21

Fügen Sie build.sbt Folgendes hinzu, damit dies für neuere Versionen von sbt funktioniert:

resolvers += "Local Maven Repository" at "file:///"+Path.userHome+"/.m2/repository"
Marius
quelle
1
Egal was ich mache, ich bekomme immer noch diesen Fehler, wenn ich sbt kompiliere: [warn] :::::::::::::::::::::::::::::::::::: :::::::::::::: [warn] :: UNRESOLVED DEPENDENCIES :: [warn] :::::::::::::::::::::::::: :::::::::::::::::::::: [warn] :: com.sanoma.cda # maxmind-geoip2-scala_2.11; 1.3.2: nicht gefunden [warn] :::::::::::::::::::::::::::::::::::::::::::::: Trace unterdrückt: zuletzt ausführen : Update für die vollständige Ausgabe. [Fehler] ( : Update) sbt.ResolveException: ungelöste Abhängigkeit: com.sanoma.cda # maxmind-geoip2-scala_2.11; 1.3.2: nicht gefunden
bashan
Ich benutzteresolvers in Global += "Local Maven Repository" at "file://" + Path.userHome + "/.m2/repository"
Carlos Ferreyra
3

Wenn Sie ein Projekt definiert haben, müssen Sie den Resolver in die Einstellungen einbeziehen. Globaler Resolver wird nicht identifiziert.

Beispiel:

lazy val core = (project in file("core")).
  settings(commonSettings: _*).
  settings(
    resolvers += Resolver.mavenLocal,
    name := "Core",
    libraryDependencies := coreDependencies
  )
Dyin
quelle
funktioniert bei mir nicht, obwohl es vielleicht etwas mit projekten zu tun hat
pferrel
1
Danke Dyin, es hat funktioniert. Resolver zu commonSettings hinzugefügt, jetzt können alle definierten Projekte im lokalen Maven-Repo nach Abhängigkeiten suchen.
Raevilman