从Maven标准目录映射到Bazel以获取测试资源

时间:2017-03-28 14:18:48

标签: bazel

根据Maven Standard Directory Layout,我们在src/test/resources中有测试依赖项文件。当测试类通过它们获取它们时,这些测试文件最终会出现在JAR和类路径中。 Resources#asCharSource

Bazel依赖测试文件并让它们出现在类路径中的首选方法是什么?

我的src/test/resources/BUILD中有以下内容:

filegroup(
    name = "test-deps",
    testonly = 1,
    srcs = glob(["*.txt"]),
    visibility = ["//visibility:public"],
)

以下src/main/java/com/path/to/my/test/BUILD

java_test(
    name = "MyTest",
    srcs = ["MyTest.java"],
    resources = ["//src/test/resources:test-deps"],
    test_class = "com.path.to.my.test.MyTest",
    deps = [
        "//src/main/com/path/to/my/code",
        "//:junit_junit",
    ],    
)

这很有效,但我不确定它是否是Bazel的最佳方式。

1 个答案:

答案 0 :(得分:5)

是的,这是推荐的方法。如docs for resources中所述,Bazel了解Maven标准目录布局,并将数据文件放在正确的类路径中:

  

jar文件中资源的位置由确定   项目结构。 Bazel首先寻找Maven的标准   目录布局,(a" src"目录后跟"资源"   目录孙子)。

如果您想单独捆绑资源,可以创建一个仅限资源的jar,然后使用resource_jars属性依赖它。

编辑:正如Ittai在下面指出的那样,Bazel不会反省资源,因此您必须小心不要遇到任何冲突(例如,pkg1 / src / main / resources / foo和pkg2 / src /主/资源/富)。 resources而不是resource_jars都不会为您检查这一点,因此如果这是一个问题,您可能希望在文件组中放置所需的任何资源,并使用genrule目标或测试来检查冲突。< / p>