Frage

Ich versuche, einen Nexus-Repository-Manager zuzugreifen, das einige grundlegende Authentifizierung erfordert. Alles funktioniert gut aus Maven2 aber wenn ich zu konfigurieren Dinge in SBT versuchen kann es nicht die Artefakte finden. Es wird mit einem benutzerdefinierten Repository-Muster (siehe ), aber ich glaube nicht, dass Materie sollte. In jedem Fall ist die entsprechende Konfiguration hier.

Project.scala:

val snapshotsName = "Repository Snapshots"
val snapshotsUrl = new java.net.URL("http://nexusHostIp:8081/nexus/content/repositories/snapshots")
val snapshotsPattern = "[organisation]/[module]/[revision]-SNAPSHOT/[artifact]-[revision](-[timestamp]).[ext]"
val snapshots = Resolver.url(snapshotsName, snapshotsUrl)(Patterns(snapshotsPattern))
Credentials(Path.userHome / ".ivy2" / ".credentials", log)

val dep = "group" % "artifact" % "0.0.1" extra("timestamp" -> "20101202.195418-3")

~ / .ivy2 / .credentials:

realm=Snapshots Nexus
host=nexusHostIp:8081
user=nexususername
password=nexuspassword

Nach einer ähnlichen Diskussion in der Benutzergruppe SBT dies sollte gut funktionieren, aber ich erhalte die folgende, wenn ich zu bauen versuchen.

==== Repository Snapshots: tried
[warn]    -- artifact group#artifact;0.0.1!artifact.jar:
[warn]    http://nexusHostIp:8081/nexus/content/repositories/snapshots/group/artifact/0.0.1-SNAPSHOT/artifact-0.0.1-20101202.195418-3.jar

Ich bin ziemlich sicher, dass dies ein Problem ist, Anmeldeinformationen und nicht etwas anderes, weil ich die URL treffen kann es sagt, dass es versucht, das Glas direkt und downloaden (nach der Authentifizierung).

Ich habe versucht, auch inline die Anmeldeinformationen zu erklären (obwohl es weniger als ideal ist) wie folgt:

Credentials.add("Repository Snapshots", "nexusHostIp", "nexususername", "nexuspassword")
War es hilfreich?

Lösung

Hier ist, was ich getan habe (sbt 0,13 + artifactory - Setup sollte für Nexus ähnlich sein):

1) Edited die Datei ~ / .sbt / Repositories wie hier angegeben: http://www.scala-sbt.org/0.13.0/docs/Detailed-Topics/Proxy-Repositories.html

[repositories]
  local
  my-ivy-proxy-releases: http://repo.company.com/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
  my-maven-proxy-releases: http://repo.company.com/maven-releases/

2) mein artifactory zu deaktivieren den anonymen Zugriff gesperrt.

3) Erstellt eine Credentials-Datei in ~ / .sbt / .credentials

realm=Artifactory Realm
host=artifactory.mycompany.com
user=username
password=password

4) eine Datei unter ~ / .sbt / 0,13 / plugins / credentials.sbt dass Drähte auf die Standardanmeldeinformationen

Erstellt
credentials += Credentials(Path.userHome / ".sbt" / ".credentials")

Nun, wenn mein Projekt Lasten sbt Treffer Artifactory wie normal.

Der Grund, warum ich es so tat, ist die Repository-Definitionen zu halten, usw., aus den Projektdateien Teams zu ermöglichen Flexibilität haben (sie können einen internen Server einrichten in-progress-Artefakte zu dienen, etc).

-Austen

Andere Tipps

UPDATE:. Diese Antwort Arbeit nicht in der letzten sbt Versionen - siehe Austens Antwort statt

In Ordnung Ich habe endlich diese aussortiert werden.

snapshotsName kann alles sein. realm in .credentials muss der HTTP-Authentifizierung Reich sein, dass zeigt sich beim Versuch, die URL des Repositorys (nexus in meinem Fall) zu treffen. realm ist auch der erste Parameter von Credentials.add. So daß die Leitung hätte sein sollen

Credentials.add("Sonatype Nexus Repository Manager", "nexusHostIp", "nexususername", "nexuspassword")

Der Hostname ist nur die IP-Adresse oder den DNS-Namen. So in .credentials host ist nur nexusHostIp ohne die Portnummer ein.

So ist die Arbeitsprojektkonfiguration ist:

val snapshotsName = "Repository Snapshots"
val snapshotsUrl = new java.net.URL("http://nexusHostIp:8081/nexus/content/repositories/snapshots")
val snapshotsPattern = "[organisation]/[module]/[revision]-SNAPSHOT/[artifact]-[revision](-[timestamp]).[ext]"
val snapshots = Resolver.url(snapshotsName, snapshotsUrl)(Patterns(snapshotsPattern))
Credentials(Path.userHome / ".ivy2" / ".credentials", log)

val dep = "group" % "artifact" % "0.0.1" extra("timestamp" -> "20101202.195418-3")

Mit einer .credentials Datei, das aussieht wie:

realm=Sonatype Nexus Repository Manager
host=nexusHostIp
user=nexususername
password=nexuspassword

Wo "Sonatype Nexus Repository Manager" ist der HTTP-Authentifizierungsbereich.

Wenn SBT Launcher ausfällt von Ihrem Proxy eine neue Version von SBT zum Download, und dass ~/.sbt/boot/update.log zeigt, dass Sie bekommen 401 Authentifizierungsfehler, können Sie die Umgebungsvariable SBT_CREDENTIALS verwenden, um festzulegen, wo die Efeu Credential-Datei.

Jede dieser soll die neue sbt Version arbeiten und heruntergeladen werden:

  1. SBT_CREDENTIALS='/home/YOUR_USER_NAME/.ivy2/.credentials' sbt
  2. Putting export SBT_CREDENTIALS="/home/YOUR_USER_NAME/.ivy2/.credentials" in Ihrem .bashrc (oder .zshrc), eine neue Shell-Sitzung starten und führen Sie dann sbt

(Sie finden die Datei ~/.ivy2/.credentials Setup wie andere Antworten hier hat gezeigt zu haben braucht)

Quelle: https://github.com/sbt/sbt/commit/96e5a7957c830430f85b6b89d7bbe07824ebfc4b

Nach der SBT-Dokumentation über :

Es gibt zwei Möglichkeiten, die Anmeldeinformationen für ein solches Repository angeben:

Inline

credentials += Credentials("Some Nexus Repository Manager", "my.artifact.repo.net", "admin", "password123")

Externe Datei

credentials += Credentials(Path.userHome / ".ivy2" / ".credentials")

Die Credentials-Datei ist eine Properties-Datei mit den Tasten Bereich, Host, Benutzer und Passwort ein. Zum Beispiel:

realm=Some Nexus Repository Manager
host=my.artifact.repo.net
user=admin
password=password123

Das ist für mich gearbeitet. Ich verwende SBT Version 0.13.15:

~/.ivy2/.my-credentials (Host ohne Port):

realm=Sonatype Nexus Repository Manager
host=mynexus.mycompany.com
user=my_user
password=my_password

build.sbt (nexus URL mit Port):

import sbt.Credentials

...

credentials += Credentials(Path.userHome / ".ivy2" / ".my-credentials")

...

resolvers in ThisBuild ++= Seq(
    MavenRepository("my-company-nexus", "https://mynexus.mycompany.com:8081/repository/maven-releases/")
)

Überprüfen Sie, ob alle Dateien mit Anmeldeinformationen.

Für mich hatte ich ein neues Projekt in sbt 1.0 (statt der guten alten 0.13), wo ich eine ~/.sbt/1.0/global.sbt Datei hatte meine Anmeldeinformationen enthalten, die ich vergessen habe. So nach einer obligatorischen Kennwortänderung wurde die artifactory Downloads gebrochen und mein Konto sperren.

Wäre schön, wenn die Kette von Berechtigungsnachweisen und Dateien, um sie füllen kann leicht überprüft werden. Wäre auch schön, wenn SBT etwas vorsichtiger und erste Überprüfung ist, wenn die Authentifizierung / Autorisierung korrekt ist, bevor tot Download X-Dateien starten und Sperren meines Kontos nach 3 misauthenticated Versuchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top