根据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的最佳方式。
答案 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>