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

Gre*_*egg 4 bazel

我们src/test/resources根据Maven标准目录布局提供测试依赖性文件.当测试类通过例如获取它们时,这些测试文件最终出现在JAR和类路径中Resources#asCharSource.

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

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

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

以下是我的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",
    ],    
)
Run Code Online (Sandbox Code Playgroud)

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

kri*_*ina 5

是的,这是推荐的方法.正如资源文档中所提到的,Bazel了解Maven标准目录布局,并将数据文件放在正确的类路径中:

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

如果要单独捆绑资源,可以创建仅资源jar,然后使用该resource_jars属性依赖它.

编辑:正如Ittai在下面指出的那样,Bazel不会反省资源,所以你必须小心不要遇到任何冲突(例如,pkg1/src/main/resources/foo和pkg2/src/main/resources /富).也resources不会resource_jars为你检查这个,所以如果这是一个问题,你可能想要在文件组中放置你需要的任何资源,并有一个genrule目标或测试来检查冲突.