首页 文章

在Bazel设置Robolectric

提问于
浏览
1

我在为Bazel构建系统设置Robolectric时遇到了一些麻烦,主要是因为它需要依赖的数量 .

似乎没有一个JAR包含Robolectric及其所有依赖项 . 因此,我试过了两个:

在第一种情况下,我遇到了一些问题,试图从提供的Groovy类生成Java代码,但仍然需要手动包含其他几个依赖项 . 在第二种情况下,我遇到了Robolectric的 MavenDependencyResolver 无法在运行时找到某些依赖项的问题,这导致必须手动包含缺少的依赖项JAR文件 .

无论哪种方式,Bazel编译并运行Robolectric测试似乎有点麻烦 . 在Bazel构建系统中使用Robolectric有更好的方法吗?

2 回答

  • 0

    再次尝试这一点,我为Robolectric的依赖项下载所有JAR的方法对我有用 . 我最初缺少的部分是jvm标志,让Robolectric知道它应该在本地寻找它的依赖,而不是通过Maven . 我按照blog post zlalanne的步骤建议下载所有JAR,将它们移动到我的项目有权访问的目录中,然后为这些目录创建一个构建目标:

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

    然后我创建了一个新规则,它将为标准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,
      )
    
  • 0

    现在可以作为android_local_test rule使用 .

相关问题