在 Bazel 中设置 Robolectric

阿尔比恩先生

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

似乎没有一个 JAR 包含 Robolectric 及其所有依赖项。正因为如此,我都尝试过:

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

  2. 下载 Robolectric 依赖项的所有 JAR,然后将它们捆绑到java_import我的测试规则可以依赖的一个中。

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

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

阿尔比恩先生

对此进行了另一次尝试,我下载所有 Robolectric 依赖项的 JAR 的方法对我有用。我最初缺少的部分是 jvm 标志,让 Robolectric 知道它应该在本地查找其依赖项,而不是通过 Maven。我按照博客文章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,
  )

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章