我在为 Bazel 构建系统设置 Robolectric 时遇到了一些麻烦,主要是由于它需要的依赖项数量。
似乎没有一个 JAR 包含 Robolectric 及其所有依赖项。正因为如此,我都尝试过:
new_git_repository
使用自定义 BUILD 文件在我的 WORKSPACE 文件中创建规则,该文件编译来自Robolectric 存储库的 Java 源代码。
下载 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] 删除。
我来说两句