从Maven标准目录到Bazel的测试资源映射
我们在从Maven标准目录到Bazel的测试资源映射,bazel,Bazel,我们在src/test/resources中有测试依赖项文件。当测试类通过(例如)获取这些测试文件时,这些测试文件最终位于JAR和类路径中 在Bazel中,依赖于测试文件并将其显示在类路径中的首选方式是什么 我的src/test/resources/BUILD中有以下内容: filegroup( name = "test-deps", testonly = 1, srcs = glob(["*.txt"]), visibility = ["//visibility
src/test/resources
中有测试依赖项文件。当测试类通过(例如)获取这些测试文件时,这些测试文件最终位于JAR和类路径中
在Bazel中,依赖于测试文件并将其显示在类路径中的首选方式是什么
我的src/test/resources/BUILD中有以下内容:
filegroup(
name = "test-deps",
testonly = 1,
srcs = glob(["*.txt"]),
visibility = ["//visibility:public"],
)
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",
],
)
在mysrc/main/java/com/path/to/my/test/BUILD中有以下内容:
filegroup(
name = "test-deps",
testonly = 1,
srcs = glob(["*.txt"]),
visibility = ["//visibility:public"],
)
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文件中资源的位置由
项目结构。巴泽尔首先寻找马文的标准
目录布局,(一个“src”目录后跟一个“resources”
目录孙子)
如果您想单独捆绑资源,可以创建一个仅限资源的jar,然后使用属性依赖它
编辑:正如Ittai在下面指出的,Bazel不会对资源进行内省,因此您必须小心不要导致任何冲突(例如,pkg1/src/main/resources/foo和pkg2/src/main/resources/foo)。resources
notresource\u jars
都不会为您检查这一点,因此,如果这是一个问题,您可能希望将您需要的任何资源放在一个文件组中,并有一个genrule目标或测试来检查冲突。在阅读了有关资源\u jars的内容后,这听起来可能是生产代码的一个不明智的选择,不是?由于它可能会将同一资源的多个副本带到生产上的多个JARresources
实际上也不会保护您,因此添加了一节关于此的内容。是的,我同意。我们现在正在做的是创建一个新的java_库目标,并将其添加为依赖项