企業のファイアウォールの背後でSBTを実行しようとしています。別のチームがArtifactoryプロキシを構成しました。このプロキシは、匿名アクセスがオンになっている場合は正常に機能しますが、パスワードが必要になると、パスワードがうまくいかないと考えます。
ワークステーションでSBTを実行すると、次のエラーが発生します。
[error] Unable to find credentials for [Artifactory Realm @ coderepo.xxx.amrs.bigco.com]
この結果、bootstrap sbt:
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: UNRESOLVED DEPENDENCIES ::
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: org.scala-lang#scala-library;2.10.6: not found
[warn] :: org.scala-sbt#sbt;0.13.12: not found
[warn] :: org.scala-lang#scala-compiler;2.10.6: not found
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
〜/ .sbtと〜/ .ivy2に.credentialsファイルを入れてみました:次のバリエーションをテストしましたが、すべて機能しません:
realm=Artifactory Realm @ coderepo.xxx.amrs.bigco.com
Host=coderepo.xxx.amrs.bigco.com
user=<username>
password=<pwd>
このエラーは、レルムに一致する資格情報の定義を見つけることができなかったことを意味していると思います。そのため、両方の場所で最初の行のいくつかのバージョンを試しました。
realm=Artifactory Realm
realm=[Artifactory Realm @ coderepo.xxx.amrs.bigco.com]
realm=coderepo.xxx.amrs.bigco.com
どれもまったく影響がないようです。
それでは、SBTがユーザー名とパスワードを使用してパスワードで保護されたArtifactoryリポジトリに対して認証できるようにする正しい方法は何ですか?
UPDATE0:Ivyドキュメントによると、最も可能性の高いレルム名は単に「Artifactory Realm」です。 SBTドキュメントによると、資格情報ファイルの正しいデフォルトの場所は%USERPROFILE%/。sbt/.credentialsです(はい、Windowsを使用しています)。 .ivy2ディレクトリにある.credentialsファイルを削除した後でも、それはまだ機能しません。
UPDATE1:関連していますが、実際には役に立ちません:
UPDATE2:これはsbtのバグだと疑い始めています-ここに問題を追加しました https:// github.com/sbt/sbt/issues/2817
グローバル資格情報の構成方法の詳細については、 この質問 を参照してください。
要約すると:
プロキシリポジトリからSBTを起動する必要がある場合は、システムプロパティsbt.boot.credentials
を設定して、認証情報ファイルを指定します。あなたの%CSIDL_PROGRAM_FILESX86%/sbt/conf/sbtconfig.txt
でこれを行うことができます、例えば:
-Dsbt.boot.credentials=/Users/my-user-name/.sbt/credentials
または、同じ目的でSBT_CREDENTIALS
環境変数を使用できます。
Artifactoryの場合、credentials
ファイルのレルムは次のように設定する必要があります。
realm=Artifactory Realm
依存関係のアーティファクトの取得を認証するには、credentials
設定で%USERPROFILE%/.sbt/0.13/plugins/my-credentials.sbt
のようなファイルを作成します。例えば:
credentials += Credentials(Path.userHome / ".sbt" / "credentials")
このファイルのデフォルトの場所は${HOME}/.sbt/<sbt-version>/.credentials
だと思います。私はこれに関する公開されたドキュメントがあると信じていますが、コード内をクリックしてこれを確認しました。
@ salim-fadhley、パスにSBTバージョンがないようです。
編集: build.sbtに
DefaultOptions.addCredentials
を追加する必要があります。次に、SBTがshow credentials
で取得する内容を確認できます。
ファイルの場所はさておき、リポジトリ名(意味なし)とセキュリティレルム(すべて意味)は混同されているようです。
リポジトリサーバーから返されるauth-challengeには、セキュリティレルムの名前が含まれます;クライアント/開発者として、あなたはそれが何であるかを制御できません、そして私の推測はあなた(クライアント/開発者)があなたに指定したレルムと一致しなければならないことです.credentials
ファイル(どこにあっても)。
一方、リポジトリ名(build.sbt
に記載)は、実際には、対応するプロジェクトの開発以外の人には何も意味しません。リポジトリサーバーの管理者は、あるプロジェクトから次のプロジェクトまで気にすることができませんでした。