LoginSignup
25
20

More than 5 years have passed since last update.

Gradleが参照するリポジトリの優先順位について

Last updated at Posted at 2018-12-17

TL;DR

Gradleが参照するリポジトリの優先順位は定義した順です。

説明

投稿時点最新バージョン(5.0)のGradleのドキュメントに以下のように書かれています。

A project can have multiple repositories. Gradle will look for a dependency in each repository in the order they are specified, stopping at the first repository that contains the requested module.

なので、以下のように書いている場合は

repositories {
    google()
    mavenCentral()
    jcenter()
}
  1. Google
  2. Maven Central
  3. JCenter

の順に優先されます。

Googleで見つからなければMaven Centralへ、Maven Centralで見つからなければJCenterへ…といった感じで依存関係の解決を試みます。

また、上記の他にも以下のような優先順位決定のルールが存在します。

  • アーティファクトのみ(jarだけなど)より、メタデータファイル(pomなど)が存在するモジュールを優先する
  • モジュールが依存しているものは、同じリポジトリから依存関係を解決する

詳細は以下のドキュメントを参照してください。

調べた背景

GitLabでAndroidのビルドを行っているのですが、ビルドが不安定で2回に1回程度の頻度で失敗していました。

失敗しているジョブを確認すると、取得しにいくjarは異なれどJCenterにjarを取りにいくところで 403 Forbidden になっていることは共通しており、JCenterが不安定なんだなと判断しました。

ただ、JCenterにしか無いjarが存在していたため、リポジトリから外すことが出来ず、なら優先順位を下げられないか?と考えたのが調査した背景です。

まとめ

調べた結果は上述した通りです。

JCenterから取得する箇所は残っているものの、格段にビルドが安定しました。

まだ安定しない場合は、インハウスリポジトリとしてNexusをたてているので、Nexusをプロキシリポジトリにしてしまおうかと考えています。

経験者つよい

403でハマってて同僚に相談に行ったら「同じとこ(サーバー)でエラー出てない?」と含みのある感じで聞かれました。最初から完全にJCenterを疑ってたし正解だし凄い…

25
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
20