web-dev-qa-db-ja.com

Artifactory仮想リポジトリからダウンロードしようとすると、SBTが資格情報を見つけることができません

企業のファイアウォールの背後で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

12
Salim Fadhley

グローバル資格情報の構成方法の詳細については、 この質問 を参照してください。

要約すると:

プロキシリポジトリから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")
13
Olli Helenius

このファイルのデフォルトの場所は${HOME}/.sbt/<sbt-version>/.credentialsだと思います。私はこれに関する公開されたドキュメントがあると信じていますが、コード内をクリックしてこれを確認しました。
@ salim-fadhley、パスにSBTバージョンがないようです。

編集: build.sbtにDefaultOptions.addCredentialsを追加する必要があります。次に、SBTがshow credentialsで取得する内容を確認できます。

ファイルの場所はさておき、リポジトリ名(意味なし)とセキュリティレルム(すべて意味)は混同されているようです。

リポジトリサーバーから返されるauth-challengeには、セキュリティレルムの名前が含まれます;クライアント/開発者として、あなたはそれが何であるかを制御できません、そして私の推測はあなた(クライアント/開発者)があなたに指定したレルムと一致しなければならないことです.credentialsファイル(どこにあっても)。

一方、リポジトリ名(build.sbtに記載)は、実際には、対応するプロジェクトの開発以外の人には何も意味しません。リポジトリサーバーの管理者は、あるプロジェクトから次のプロジェクトまで気にすることができませんでした。

3
Darren Bishop