从 Maven 标准目录映射到 Bazel 以获取测试资源
Mapping from Maven standard directory to Bazel for test resources
根据 Maven Standard Directory Layout. These test files end up in the JAR and on the classpath when test classes fetch them via, e.g. Resources#asCharSource
.
,我们在 src/test/resources
中有测试依赖文件
在 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 中的最佳方式。
是的,这是推荐的方法。如 docs for resources 中所述,Bazel 理解 Maven 标准目录布局并将数据文件放在正确的类路径中:
The location of the resources inside of the jar file is determined by
the project structure. Bazel first looks for Maven's standard
directory layout, (a "src" directory followed by a "resources"
directory grandchild).
如果您想单独捆绑资源,您可以创建一个仅包含资源的 jar,然后使用 resource_jars
属性依赖它。
编辑:正如 Ittai 在下面指出的那样,Bazel 不会内省资源,因此您必须小心不要以任何冲突结束(例如,pkg1/src/main/resources/foo 和 pkg2/src/main/resources/foo)。 resources
和 resource_jars
都不会为您检查这个,所以如果这是一个问题,您可能希望将您需要的任何资源放在一个文件组中,并有一个 genrule 目标或测试来检查冲突。
根据 Maven Standard Directory Layout. These test files end up in the JAR and on the classpath when test classes fetch them via, e.g. Resources#asCharSource
.
src/test/resources
中有测试依赖文件
在 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 中的最佳方式。
是的,这是推荐的方法。如 docs for resources 中所述,Bazel 理解 Maven 标准目录布局并将数据文件放在正确的类路径中:
The location of the resources inside of the jar file is determined by the project structure. Bazel first looks for Maven's standard directory layout, (a "src" directory followed by a "resources" directory grandchild).
如果您想单独捆绑资源,您可以创建一个仅包含资源的 jar,然后使用 resource_jars
属性依赖它。
编辑:正如 Ittai 在下面指出的那样,Bazel 不会内省资源,因此您必须小心不要以任何冲突结束(例如,pkg1/src/main/resources/foo 和 pkg2/src/main/resources/foo)。 resources
和 resource_jars
都不会为您检查这个,所以如果这是一个问题,您可能希望将您需要的任何资源放在一个文件组中,并有一个 genrule 目标或测试来检查冲突。