RobolectricのOffline設定のメモです。
Robolectricは最初の実行時にjarをダウンロードします。2回目以降はダウンロードしたものを使うのでローカル環境ならまだ良いんですけど、CircleCIの場合は毎回実行します。そしてたまにダウンロードに失敗します。
たまにCIが失敗するのでなんとかしたいと思います。Robolectricにはofflineっていう設定項目があってそれを利用します。
Robolectricのインストールとかは省略
Offlineのgradle設定ファイル
robolectricのoffline設定とjarのダウンロードのタスクの設定したファイルをプロジェクト直下に配置します。ファイル名は prepare-roborectric.gradle
にしてます。
この例だと、 .robolectric-dependencies
というディレクトリにjarをダウンロードします。
dependencies
に依存のjarを設定するのですが、これがテストの設定とかで微妙に異なります。
確認する方法です。後述するapp/build.gradleの設定をまだしない状態でやってください。
最初に ~/.m2/repository/org/robolectric
が存在する場合は一度削除しておきます。次に ./gradlw testDebug -d
を実行します。ログがたくさん出てくるんですが、次のような箇所を探します。
[TestEventLogger] Downloading: org/robolectric/android-all/o-preview-4-robolectric-0/android-all-o-preview-4-robolectric-0.pom from repository sonatype at https://oss.sonatype.org/content/groups/public/
これが必要なものになります。今回は一つですが、複数の場合もあります。
app/build.gradle
で、 app/build.gradle
に先程の設定を読み込ませます。
apply from: '../prepare-robolectric.gradle'
実行
./gradlew testDebug
や ./gradlew downloadRobolectricDependencies
を実行すれば、あとは勝手にディレクトリが作られてjarがダウンロードされると思います。
CircleCI設定
CircleCIはこの .robolectric-dependencies
ディレクトリをキャッシュするようにします。最初の1回目はダウンロード必要ですが、それ以降はキャッシュがあるので大丈夫なはずです。注意としては、 ~/.gradle
もキャッシュしないとまたダウンロードされます。実行順とか気をつけてください。
設定は後述するサンプルを見てください。
.gitignore
.robolectric-dependencies
はgitに含めないようにします。
サンプル
サンプルを置いておきます。
まとめ
ここまで書いておいてアレですが、面倒な割にそこまで劇的なメリットはないですね…ちょこっとCIが落ちる確率を減らすくらいです。速度もほとんど変わらないし。
ただ、少しでも改善したい方は設定しておくと良いかもしれません。