質問
基本的な認証が必要なNexusリポジトリマネージャーにアクセスしようとしています。 Maven2からすべてが正常に機能しますが、SBTで物事を構成しようとすると、アーティファクトが見つかりません。カスタムリポジトリパターンを使用しています(参照してください この関連する質問)しかし、私はそれが重要ではないと思います。いずれにせよ、関連する構成はここにあります。
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
によると SBTユーザーグループで同様の議論 これは正常に動作するはずですが、構築しようとすると、以下を取得しています。
==== 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
これは資格情報の問題であり、他の何かではないことは確かです。なぜなら、それは直接試みて瓶をダウンロードしていると言っているURLを押すことができるからです(認証後)。
私はまた、資格情報をインラインで宣言しようとしました(理想的ではありませんが)そうです。
Credentials.add("Repository Snapshots", "nexusHostIp", "nexususername", "nexuspassword")
解決
私がしたことは次のとおりです(SBT 0.13 + Artifactory -setupはnexusに似ている必要があります):
1)ここで指定されているように、ファイル〜/.SBT/リポジトリを編集しました。 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)匿名アクセスを無効にするために、私の人工物をロックダウンしました。
3)〜/.sbt/.credentialsで資格情報ファイルを作成しました
realm=Artifactory Realm
host=artifactory.mycompany.com
user=username
password=password
4)〜/.sbt/0.13/plugins/credentials.sbtの下にファイルを作成しました。
credentials += Credentials(Path.userHome / ".sbt" / ".credentials")
私のプロジェクトがロードされると、SBTは通常のようにアーティファクティにヒットします。
私がこのようにした理由は、リポジトリの定義などをプロジェクトファイルから外して、チームが柔軟性を持つことができるようにするためです(内部サーバーを設定して進行中のアーティファクトなど)。
- オーストン
他のヒント
更新:この回答は最近のSBTバージョンでは機能しません - 代わりにオースティンの回答を参照してください。
さて、私はついにこれを整理しました。
snapshotsName
何でもかまいません。 realm
.Credentialsは、リポジトリのURL(私の場合はNexus)を押しようとするときに表示されるHTTP認証の領域でなければなりません。 realm
の最初のパラメーターでもあります Credentials.add
. 。そのため、そのラインはそうあるべきでした
Credentials.add("Sonatype Nexus Repository Manager", "nexusHostIp", "nexususername", "nexuspassword")
ホスト名は、IPまたはDNS名のみです。だから.credentialsで host
ただです nexusHostIp
ポート番号なし。
したがって、作業プロジェクトの構成は次のとおりです。
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")
次のように見える.credentialsファイルを使用してください。
realm=Sonatype Nexus Repository Manager
host=nexusHostIp
user=nexususername
password=nexuspassword
「Sonatype Nexus Repository Manager」はHTTP認証領域です。
SBTランチャーがプロキシからSBTの新しいバージョンをダウンロードできない場合、それは ~/.sbt/boot/update.log
401認証エラーがあることを示しています。環境変数SBT_CREDENTIALSを使用して、IVY資格情報ファイルがどこにあるかを指定できます。
これらのいずれかが機能し、新しいSBTバージョンをダウンロードする必要があります。
SBT_CREDENTIALS='/home/YOUR_USER_NAME/.ivy2/.credentials' sbt
- パッティング
export SBT_CREDENTIALS="/home/YOUR_USER_NAME/.ivy2/.credentials"
あなたの中で.bashrc
(また.zshrc
)、新しいシェルセッションを開始してから実行しますsbt
(あなたは持っている必要があります ~/.ivy2/.credentials
ここの他の回答のようにファイルのセットアップが表示されています)
ソース: https://github.com/sbt/sbt/commit/96e5a7957c830f85b6b89d7bbe07824ebfc4bb
続いて SBTドキュメット:
このようなリポジトリの資格情報を指定するには、次の2つの方法があります。
列をなして
credentials += Credentials("Some Nexus Repository Manager", "my.artifact.repo.net", "admin", "password123")
外部ファイル
credentials += Credentials(Path.userHome / ".ivy2" / ".credentials")
資格情報ファイルは、キーレルム、ホスト、ユーザー、パスワードを備えたプロパティファイルです。例えば:
realm=Some Nexus Repository Manager
host=my.artifact.repo.net
user=admin
password=password123
これは私のために働いた。 SBTバージョン0.13.15を使用しています。
~/.ivy2/.my-credentials
(ポートなしのホスト):
realm=Sonatype Nexus Repository Manager
host=mynexus.mycompany.com
user=my_user
password=my_password
build.sbt
(ポート付きNexus URL):
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/")
)
資格情報を含むすべてのファイルを確認します。
私にとって、私は(古き良き0.13の代わりに)SBT 1.0で新しいプロジェクトを持っていました。 ~/.sbt/1.0/global.sbt
私の資格情報を含むファイル。そのため、必須のパスワードが変更された後、人工のダウンロードが壊れてアカウントをロックしました。
資格情報のチェーンとそれらを埋めるファイルのチェーンを簡単に検査できる場合は、素晴らしいことです。また、SBTがもう少し慎重であり、最初に認証/承認が正しいかどうかを最初にチェックする前に、3回の誤解の試みの後にXファイルをダウンロードし、アカウントをロックする前に、最初に確認してください。