【问题标题】:Setting up Robolectric in Bazel在 Bazel 中设置 Robolectric
【发布时间】:2017-08-08 07:26:46
【问题描述】:

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

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

  1. 使用自定义 BUILD 文件在我的 WORKSPACE 文件中创建 new_git_repository 规则,该文件编译来自 Robolectric repo 的 Java 源代码。

  2. Downloading all JARs for Robolectric’s dependencies,然后将它们捆绑在我的测试规则可以依赖的java_import 中。

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

不管怎样,让 Bazel 编译和运行 Robolectric 测试似乎有点麻烦。在 Bazel 构建系统中使用 Robolectric 是否有更好的方法?

【问题讨论】:

标签: robolectric bazel


【解决方案1】:

在这方面又做了一次尝试,我为 Robolectric 的依赖项下载所有 JAR 的方法对我有用。我最初缺少的部分是 jvm 标志,让 Robolectric 知道它应该在本地查找其依赖项,而不是通过 Maven。我按照blog postzlalanne 建议的步骤下载所有 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,
  )

【讨论】:

    【解决方案2】:

    现在可以使用 android_local_test rule

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 2019-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多