49

基本認証が必要な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に直接アクセスして、jarをダウンロードしようとしていることを示しているためです(認証後)。

また、次のようにクレデンシャルをインラインで宣言しようとしました(理想的とは言えませんが)。

Credentials.add("Repository Snapshots", "nexusHostIp", "nexususername", "nexuspassword")
4

6 に答える 6

84

これが私がしたことです(sbt 0.13 +アーティファクト-セットアップはnexusでも同様である必要があります):

1)ここで指定されているようにファイル〜/ .sbt / repositoryを編集しました: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は通常のようにアーティファクトにヒットします。

私がこのようにした理由は、リポジトリ定義などをプロジェクトファイルから除外して、チームが柔軟性を持てるようにするためです(進行中のアーティファクトなどを提供するために内部サーバーをセットアップできます)。

-オースティン

于 2013-10-25T19:56:49.877 に答える
35

更新:この回答は最近のsbtバージョンでは機能しません-代わりにAustenの回答を参照してください。

さて、私はついにこれを整理しました。

snapshotsName何でもかまいません。realm.credentialsは、リポジトリのURL(私の場合はnexus)にアクセスしようとしたときに表示されるHTTP認証レルムである必要があります。realmの最初のパラメータでもありますCredentials.add。だからその行は

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

ホスト名は単なるIP名またはDNS名です。したがって、.credentialsにhostnexusHostIpポート番号がありません。

したがって、実際のプロジェクト構成は次のとおりです。

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

ここで、「SonatypeNexusRepositoryManager」はHTTP認証レルムです。

于 2010-12-04T00:43:53.543 に答える
6

SBTドキュメントに続いて:

このようなリポジトリの資格情報を指定するには、次の2つの方法があります。

列をなして

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

外部ファイル

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

この.credentialsファイルは、キーレルム、ホスト、ユーザー、およびパスワードを含むプロパティファイルです。例えば:

realm=Some Nexus Repository Manager
host=my.artifact.repo.net
user=admin
password=password123
于 2016-06-02T17:19:48.997 に答える
5

SBTランチャーがプロキシから新しいバージョンのSBTをダウンロードできず、~/.sbt/boot/update.log401認証エラーが発生していることを示している場合は、環境変数SBT_CREDENTIALSを使用して、ツタのクレデンシャルファイルの場所を指定できます。

これらのいずれかが機能し、新しいsbtバージョンをダウンロードする必要があります。

  1. SBT_CREDENTIALS='/home/YOUR_USER_NAME/.ivy2/.credentials' sbt
  2. export SBT_CREDENTIALS="/home/YOUR_USER_NAME/.ivy2/.credentials"あなたの.bashrc(または)を入れて.zshrc、新しいシェルセッションを開始してから実行しますsbt

~/.ivy2/.credentials(ここに示されている他の回答のようにファイルを設定する必要があります)

ソース:https ://github.com/sbt/sbt/commit/96e5a7957c830430f85b6b89d7bbe07824ebfc4b

于 2016-10-28T07:09:27.083 に答える
2

これは私のために働いた。私は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/")
)
于 2017-11-01T15:56:12.417 に答える
2

クレデンシャルを含むすべてのファイルを確認します。

私の場合、sbt 1.0(古き良き0.13ではなく)に新しいプロジェクトがあり~/.sbt/1.0/global.sbt、クレデンシャルを含むファイルがありましたが、それを忘れていました。そのため、必須のパスワード変更後、アーティファクトのダウンロードが壊れ、アカウントがロックされました。

クレデンシャルのチェーンとそれらを埋めるファイルを簡単に検査できれば便利です。また、SBTがもう少し注意深く、認証/承認が正しいかどうかを最初にチェックしてから、Xファイルのダウンロードを開始し、3回の認証ミスの試行後にアカウントをロックするとよいでしょう。

于 2018-06-05T11:47:22.880 に答える