2017-08-08 7 views
1

RobolectricをBazelビルドシステムに設定する際に、いくつかの問題があります。これは、主に必要な依存関係があるためです。BazelにRobolectricを設定する

Robolectricとそのすべての依存関係を含む単一のJARがないようです。そのため、私は両方試してみた:

  1. Robolectric repoからJavaソースをコンパイルしたカスタムビルドファイルと私のワークスペースファイル内new_git_repositoryルールを作成します。

  2. Downloading all JARs for Robolectric’s dependenciesを入力し、これらをテストルールに依存するjava_importにバンドルします。最初のケースで

、私が提供GroovyクラスからJavaコードを生成しようとしている問題に走ったし、今でも手動で他のいくつかの依存関係を含める必要がありました。 2番目のケースでは、RobolectricのMavenDependencyResolverが実行時に特定の依存関係を見つけることができないという問題がありました。これにより、見つからない依存関係のJARファイルを手動で組み込む必要があります。

これはBazelにRobolectricテストをコンパイルして実行させるのは面倒です。 BazelビルドシステムでRobolectricを使用する方が良い方法はありますか?

+0

この[ブログ投稿](http://robolectric.org/blog/2017/03/01/hermetic-builds/)は、優れたリソースであるかもしれません。私はBazelを使って議論している[このgithubの問題](https://github.com/robolectric/robolectric/issues/2292)を読んだ後でそれを見つけました。 – zlalanne

+0

FWIW、Bazelのファーストクラスの耐電力測定が行われています。 https://github.com/bazelbuild/bazel/issues/2080 – Adam

答えて

0

Robolectricの依存関係のためにすべてのJARをダウンロードするアプローチは、私にとってはうまくいきました。私が最初に欠けていた部分は、RobolectricにMavenではなくローカルで依存関係を探すべきであることを知らせるjvmフラグでした。

java_import(
    name = "robolectric", 
    jars = glob([ 
     "*.jar", 
    ]), 
    visibility = [ 
     "//visibility:public", 
    ], 
) 

は、その後、私が提供する新しいルールを作成しました: blog post zlalanneはすべてのJARをダウンロードすることが示唆さから、私は、これらのビルドターゲットを作成し、私のプロジェクトがアクセス権を持つディレクトリにそれらを移動し、手順に従っ標準java_testルールへの正しいRobolectric依存& JVMフラグを:

def android_robolectric_test(name, deps=[], srcs=[], test_class="", visibility=None): 
    androidPlatform = [Label('@androidsdk//:platforms/android-25/android.jar')] 
    robolectricDeps = androidPlatform + [Label(“//path/to/robolectric:robolectric")] 

    native.java_test(
    name=name, 
    srcs=srcs, 
    deps=robolectricDeps + deps, 
    test_class=test_class, 
    jvm_flags=[ 
     "-Drobolectric.offline=true", 
     "-Drobolectric.dependency.dir=‘path/to/robolectric/’”, 
    ], 
    visibility=visibility, 
) 
関連する問題