1月ももう終わりますが、あけましておめでとうございます。デベロッパーアドボケイトのよこなです。
JFrog Artifactoryは自分たちのアーティファクト(バイナリファイル)を保管する以外に、外部レジストリ(Maven Central, Docker Hubなど)からライブラリのアーティファクトを取得する際の仲介役としても使えます。Artifactoryを経由することで、一度取得したことのあるアーティファクトを保存しキャッシュとして活用できる他、様々なメリットがあります。
このエントリではGradleを使って依存解決する方法を紹介します。
Artifactoryを導入するなら依存解決以外にも活用するのがオススメ(本音)ですが、まずはここから始めてみるパターンも大いにアリだと思う(これもまた本音)ので、依存解決だけにフォーカスして書いていきます。おそらく、JCenterを使い続けたい方にはぴったりの内容かなと思います (参考: Bintray、JCenter、GoCenter、ChartCenterのサービス終了) 。
公式Wikiもあるものの、細かいことまで書かれているので「結局どうしたらいいの」となった方に贈る記事です!
手順
Artifactoryを利用できる状態にする
既にお使いのArtifactoryがあればそちらをお使いいただき、なくて試してみたい場合は無料なのでお気軽に登録してみてください。 jfrog.com
リモートリポジトリを作成する
Artifactoryで使えるリポジトリには種類がある中、依存解決に利用するのは「リモートリポジトリ」です。
今回はリモートリポジトリだけ作りますが、この手順も既にお持ちのものがあればスキップしてください。
右上のメニューからGradle用のリモートリポジトリを作成します。リポジトリの名前は xxx-gradle-maven-remote
xxx-gradle-remote
(xxx
はアプリケーションやプロジェクトの名前) など、パッケージ・リポジトリの種類が分かる形がオススメです。
URLは次の値を入れてください。
使うリポジトリ | URL |
---|---|
Maven Central | https://repo.maven.apache.org/maven2 |
https://maven.google.com |
|
JCenter | https://jcenter.bintray.com |
ビルドスクリプト (build.gradle
) を更新する
Artifactoryを使っていない場合、次のような記述でリポジトリを指定しますよね。例えば次のような記述だと、基本的にはMaven Central -> Googleの順でアーティファクトを探しにいって依存解決します*1。
buildscript { repositories { mavenCentral() google() } }
ここでArtifactoryを使う場合、記述はこうなります。なお、紹介している設定ファイルはArtifactoryからダウンロードできます(後述)。
repositories { maven { url "${artifactory_url}" credentials { username = "${artifactory_user}" password = "${artifactory_password}" } } }
変数は gradle.properties
などを使って埋め込んでください。
変数 | 値 |
---|---|
artifactory_url | https://yyy.jfrog.io/artifactory/xxx-gradle-maven-remote 形式のURL ( https://【ArtifactoryのURL※ご自身で設定したサーバーIDを含むもの】/artifactory/【リモートリポジトリ名】 ) |
artifactory_user | Artifactoryのユーザー |
artifactory_password | ArtifactoryのパスワードまたはAPI Key |
設定はこれだけ!あとはいつものとおり依存解決 (gradle build
とかgradle assemble
) すればArtifactoryを経由するようになります。ということで最低限必要なのはここまでで、残りは補足やお役立ち情報です。
Artifactoryから設定ファイル (build.gradle
とgradle.properties
) をダウンロードする
上記の設定ファイルは自分で記述しなくてもダウンロード可能ですが、現状だと依存解決以外に必要な設定もまとめて入ってくる形になっています。記述量はさほど多くないので、必要なものだけ取り入れてシンプルさを保つために自分で書いてしまうのも手だと思います。
不要な設定に要注意
Artifactoryからダウンロードされるファイル、またウェブ上にある古い記事には artifactory.resolve.repotitories
という設定が含まれている場合があります。実は冗長な設定で不要なので削除していただいても動作します。
複数の外部リポジトリを使う
1つのリモートリポジトリに設定できる外部リポジトリは1つです。しかし、依存解決にMaven CentralもGoogleもJCenterも使いたいケースも多々あるでしょう。その場合は必要な数だけリモートリポジトリを作って、「バーチャルリポジトリ」でまとめます *2。
バーチャルリポジトリは複数のリポジトリを束ねて仮想的に1つのリポジトリに見せる機能です。要はインタフェースの役割を果たしてくれ、ユーザーはその裏側にあるリポジトリの構成を意識せずに使うことができます。
こちらは右上のメニューでバーチャルリポジトリ作成を選べます。名前は xxx
や xxx-virtual
とし、まとめたいリポジトリをすべて選択すればOKです。このとき、UI上でリポジトリが並ぶ順番に応じて依存解決先が決まります。
example-gradle-remote-mavencentral
(Maven Centralにアクセスするリモートリポジトリ)example-gradle-remote-google
(GoogleのMavenリポジトリにアクセスするリモートリポジトリ)
の2つを用いた次の例ではMaven Central -> Googleの順に優先されるというわけです (リポジトリ名長くて切れちゃってますが)。
以上です〜!これで取得したライブラリのアーティファクトがArtifactoryにたまっていきます。冒頭で説明したとおりキャッシュの役割を果たすので時間短縮が期待できたり、JFrog Xrayを使ってセキュリティスキャンができたり、便利なことも多いのでぜひ試してみてください!
*1:参考: Declaring repositories, 第60章 ビルドロジックの体系化など
*2:ビルドスクリプトに全リモートリポジトリを羅列することも可能ですが、リポジトリに変更があったときのメンテナンスが楽なのでバーチャルリポジトリの利用がオススメです