企業のファイアウォール内に Maven/Ivy プロキシリポジトリをセットアップし、開発者の sbt インスタンスがそのプロキシを通じてアーティファクトを解決したい場合があります。これが機能するために必要な変更点を詳しく説明しましょう。
組織内の多くの開発者がアーティファクトを解決しようとすると、状況が発生します。各開発者のマシンは、チームの他の誰かが既にダウンロードしているかどうかに関係なく、インターネットにアクセスしてアーティファクトをダウンロードします。プロキシリポジトリは、組織のリモートダウンロードの単一ポイントを提供します。制御とセキュリティの懸念に加えて、プロキシリポジトリは、チーム全体の速度向上に主に重要です。
優れたプロキシリポジトリソリューションは多数あります
プロキシリポジトリをインストールして設定したら、ニーズに合わせて sbt を設定します。Ivy リポジトリのプロキシの問題については、下部のメモをお読みください。
プロキシリポジトリを利用するには、sbt は 2 か所で設定する必要があります。1 つ目は `~/.sbt/repositories` ファイルで、2 つ目はランチャースクリプトです。
リポジトリファイルは、ランチャーの外部設定です。設定ファイルの正確な構文については、sbt ランチャーの設定で詳しく説明しています。
設定例を次に示します
[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/
この設定例では、sbt 用に 3 つのリポジトリが設定されています。
最初のリゾルバーは `local` で、`publishLocal` を使用してプッシュされたアーティファクトが他の sbt プロジェクトに表示されるようにするために使用されます。
2 番目のリゾルバーは `my-ivy-proxy-releases` です。このリポジトリは、会社プロキシリポジトリから sbt *自体* と、必要な sbt プラグインを解決するために使用されます。Ivy リゾルバーパターンは重要なので、表示されているものと一致することを確認してください。そうでない場合、sbt プラグインを解決できない可能性があります。
最後のリゾルバーは `my-maven-proxy-releases` です。このリポジトリは、Maven セントラルを含むすべての標準 Maven リポジトリのプロキシです。
プロキシリポジトリを使用するために必要なのは、このリポジトリファイルだけです。これらのリポジトリは、どの sbt ビルドにも最初に含まれますが、プロキシリポジトリを強制的に使用するように追加の設定を行うことができます。他の設定の代わりに。
プロキシリポジトリに接続するための認証情報を定義する必要がある場合は、認証情報を含むファイルを指す環境変数 `SBT_CREDENTIALS` を定義します
export SBT_CREDENTIALS="$HOME/.ivy2/.credentials"
ファイルの内容は次のとおりです
realm=My Nexus Repository Manager
host=my.artifact.repo.net
user=admin
password=admin123
上記がお使いのシステムで機能しない場合は、ブート認証情報を明示的に提供するという別の方法があります
-Dsbt.boot.credentials="$HOME/.ivy2/.credentials"
また、ビルドファイルに認証情報を直接追加します
credentials += Credentials(Path.userHome / ".ivy2" / ".credentials")
sbt ランチャーは、プロキシリポジトリの使用を可能にする 2 つの設定オプションをサポートしています。1 つ目は `sbt.override.build.repos` 設定で、2 つ目は `sbt.repository.config` 設定です。
この設定は、追加されたすべての sbt プロジェクトリゾルバーを無視し、`repositories` 設定で設定されたリゾルバーを優先するように指定するために使用されます。これを適切に設定された `~/.sbt/repositories` ファイルで使用すると、ビルドにプロキシリポジトリのみが使用されます。
次のように指定されます
-Dsbt.override.build.repos=true
値のデフォルトは false で、明示的に有効にする必要があります。
ユーザー権限エラーまたは開発者の便宜のために `~/.sbt/repositories` ファイルを作成できない場合は、次の方法で sbt 開始スクリプトを直接変更できます
-Dsbt.repository.config=<path-to-your-repo-file>
これは、ユーザーが独自のデフォルトリポジトリファイルをまだ持っていない場合にのみ必要です。
sbt のプロキシリポジトリを設定する際に最もよく犯される間違いは、*maven* と *ivy* の両方のリポジトリを *同じ* プロキシリポジトリに *マージ* しようとすることです。一部のリポジトリマネージャーではこれが許可されていますが、お勧めしません。
会社で Ivy を使用していない場合でも、sbt は独自のプラグインのバイナリ互換性制約を処理するためにカスタムレイアウトを使用します。これらが正しく解決されるようにするには、Maven 用と Ivy 用の 2 つの仮想/プロキシリポジトリをセットアップするだけです。
設定例を次に示します
**注**: プロキシリポジトリとして Nexus を使用する場合、アップストリームリポジトリ https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases に作成するプロキシマッピングのレイアウトポリシーを「許可」に設定することが非常に重要です。設定しない場合、Nexus はこの URL への元のリクエストのプロキシを停止し、代わりに HTTP 404 を発行し、依存関係は解決されません。