测试资源的 Bazel - 输入路径不存在:



我正在尝试使用Bazel进行java测试。并且需要访问资源下的数据文件。我的项目具有标准的 Maven 结构。我正在为资源使用文件组,并将其作为java_test依赖项。问题是当我尝试运行测试时,它失败并出现以下错误java.lang.RuntimeException: org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: file:/private/var/tmp/_bazel_username/2c26269e9af968f4ce3e88b22720114e/execroot/myproject/bazel-out/darwin-fastbuild/bin/hadoop/com_company_hadoop_search_join_TermTest.jar!/com/company/hadoop/search/join/names.txt我的src/test/resources/BUILD中有以下内容:

filegroup(
    name = "resources",
    testonly = 1,
    srcs = glob(["**/*.txt"]),
    visibility = ["//visibility:public"],
)

在我的hadoop/BUILD中还有以下内容:

java_test(
    srcs = 
        ["src/test/java/com/company/hadoop/search/join/TermTest.java"],
    resources = ["//hadoop/src/test/resources:resources"],
deps = [
        "//src/main/java/com/path/to/my/code",
        "//:junit_junit",
    ],    
)

我验证了测试 jar 内容和文本文件确实按预期存在。

我相信

你的测试"资源"不是java资源,而是数据文件。

使用数据属性:

java_test(
    srcs = [
        "src/test/java/com/company/TermTest.java",
    ],
    data = [
        "//hadoop/src/test/resources:resources",
    ],
    deps = [
        "//src/main/java/com/path/to/my/code"
    ],    
)

最新更新