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

2023-12-05

我们有测试依赖文件src/test/resources根据Maven 标准目录布局。当测试类通过以下方式获取这些测试文件时,这些测试文件最终会出现在 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 中最好的方法。


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

jar 文件内资源的位置由以下因素决定 项目结构。 Bazel首先寻找Maven的标准 目录布局,(“src”目录后跟“resources” 目录孙)。

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

编辑:正如 Ittai 在下面指出的那样,Bazel 不会内省资源,因此您必须小心,不要最终发生任何冲突(例如,pkg1/src/main/resources/foo 和 pkg2/src/main/resources/富)。两者都不resources not resource_jars将为您检查这一点,因此如果这是一个问题,您可能需要将所需的任何资源放入文件组中,并有一个 genrule 目标或测试来检查冲突。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Maven 标准目录映射到 Bazel 以获取测试资源 的相关文章

随机推荐