Comment l'accès sécurisé Nexus avec sbt?
J'essaye d'accéder à un Nexus gestionnaire de référentiel qui exige une authentification de base. Tout fonctionne bien à partir de Maven2, mais lorsque j'essaie de configurer les choses dans SBT il ne peut pas trouver les artefacts. C'est à l'aide d'un custom modèle de référentiel (voir cette question relative à la) mais je ne pense pas que devrait avoir de l'importance. En tout cas, la configuration correspondante est ici.
Projet.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/.les informations d'identification:
realm=Snapshots Nexus
host=nexusHostIp:8081
user=nexususername
password=nexuspassword
Selon une discussion similaire dans le SBT groupe d'utilisateurs cela devrait fonctionner très bien, mais je suis arriver au suivant lorsque j'essaie de construire.
==== 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
Je suis assez certain que c'est une des informations d'identification de problème et pas autre chose parce que je peux frapper l'URL qu'il dit qu'il est en train d'essayer directement et télécharger le jar (après authentification).
J'ai aussi essayé de déclarer les informations d'identification en ligne (même si c'est pas l'idéal) comme suit:
Credentials.add("Repository Snapshots", "nexusHostIp", "nexususername", "nexuspassword")
Vous devez vous connecter pour publier un commentaire.
Voici ce que j'ai fait (sbt 0.13 + artifactory - l'installation doit être similaire pour les nexus):
1) d'éditer le fichier ~/.sbt/référentiels comme indiqué ici: http://www.scala-sbt.org/0.13.0/docs/Detailed-Topics/Proxy-Repositories.html
2) Verrouillé mon artifactory pour désactiver l'accès anonyme.
3) crée une informations d'identification de fichier dans ~/.sbt/.les informations d'identification
4) a Créé un fichier dans ~/.sbt/0.13/plugins/informations d'identification.sbt que les fils les informations d'identification par défaut
Maintenant, quand mon projet de charges sbt hits artifactory comme normal.
La raison, je l'ai fait de cette façon est de garder le référentiel de définitions, etc, sur les fichiers de projet pour permettre aux équipes d'avoir une certaine souplesse (ils peuvent mettre en place un serveur interne à servir en cours d'artefacts, etc).
-Austen
Sonatype Nexus Repository Manager
.public-ivy-releases: https://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
credentials.sbt
dans le délai prescrit de dossier, ça ne fonctionne pas, mais si je l'ai mis un dossier vers le haut (~/.sbt/0.13/credentials.sbt
), il n'.Mise à JOUR: Cette réponse n'a pas de travail au cours des dernières sbt versions - voir Austen, en réponse à la place.
Bien, j'ai enfin eu cette triés.
snapshotsName
peut être n'importe quoi.realm
dans .les informations d'identification doivent être le HTTP domaine d'Authentification qui s'affiche lorsque vous essayez de frapper l'URL du référentiel (lien dans mon cas).realm
est également le premier paramètre deCredentials.add
. De sorte que la ligne doit avoir étéLe nom d'hôte est simplement l'adresse ip ou du nom DNS. Donc, dans .les informations d'identification
host
est justenexusHostIp
sans le numéro de port.De sorte que le travail de configuration du Projet est:
Avec un .les informations d'identification de fichier qui ressemble à:
Où "Sonatype Nexus Gestionnaire de Référentiel" est le HTTP domaine de l'Authentification.
Si SBT lanceur est de ne pas en télécharger une nouvelle version de SBT à partir de votre proxy, et que
~/.sbt/boot/update.log
est de montrer que vous êtes l'obtention 401 erreurs d'authentification, vous pouvez utiliser la variable d'environnement SBT_CREDENTIALS pour spécifier où le lierre fichier des informations d'identification est.De travail et de télécharger la nouvelle sbt version:
SBT_CREDENTIALS='/home/YOUR_USER_NAME/.ivy2/.credentials' sbt
export SBT_CREDENTIALS="/home/YOUR_USER_NAME/.ivy2/.credentials"
dans votre.bashrc
(ou.zshrc
), démarrer une nouvelle session de shell, puis exécutezsbt
(Vous aurez besoin d'avoir la
~/.ivy2/.credentials
fichier de configuration comme d'autres réponses ici a montré)Source: https://github.com/sbt/sbt/commit/96e5a7957c830430f85b6b89d7bbe07824ebfc4b
À la suite de la SBT Documetation:
Il y a deux façons de spécifier les informations d'identification pour un tel dépôt:
Inline
credentials += Credentials("Some Nexus Repository Manager", "my.artifact.repo.net", "admin", "password123")
Fichier Externe
Les informations d'identification de fichier est un fichier de propriétés avec des touches de domaine, hôte, utilisateur et mot de passe. Par exemple:
Cela a fonctionné pour moi. Je suis l'aide de SBT version 0.13.15:
~/.ivy2/.my-credentials
(hôte sans le port):build.sbt
(lien url avec le port):Vérifier tous les fichiers contenant des informations d'identification.
Pour moi j'ai eu un nouveau projet dans le sbt 1.0 (au lieu de la bonne vieille 0.13), où j'ai eu un
~/.sbt/1.0/global.sbt
fichier contenant mes informations d'identification, qui je l'avais oublié. Ainsi, après un changement de mot de passe obligatoire, le artifactory téléchargements a été brisée et le blocage de mon compte.Serait bien si la chaîne d'informations d'identification et les fichiers de remplissage peut être facilement inspecté. Serait bien aussi si SBT a été un peu plus prudent et vérifier d'abord si l'authentification/autorisation est correct, avant de commencer tot télécharger X-files et de verrouillage de mon compte après 3 misauthenticated tentatives.