访问数据块中列出的文件

问题描述 投票:0回答:1

我在 bazel 中看到了一些有关数据依赖关系的问题,但我尝试过的似乎都不起作用。

我的项目有这样的结构:

|-- BUILD.bazel
|-- resources
|   |-- gold
|   `-- inputs
|       `-- my
|           `-- pkg
|               `-- ISimple.java
`-- src
    `-- my
        `-- tests
            `-- BasicTests.java

我的构建文件中有以下内容:

filegroup(
    name = "test_sources",
    srcs = glob(
        ["src/**/*.java"],
    ),
)

filegroup(
    name = "test_resources",
    srcs = glob(
        ["resources/**/*"],
    ),
)

java_library(
    name = "allTests",
    ...
    data = [":test_resources"],  # Just for good measure
    deps = [
        ...
    ],    
)

java_test(
    name = "Simple",
    srcs = [":test_sources"],
    test_class = "my.tests.BasicTests",
    data = [":test_resources"],   # I thought this would make my resources available
    deps = [
        ":allTests",
        ...
    ]
)

我的第一次尝试实际上是将资源放入测试 jar 文件中并从那里读取它们,但是当我尝试从测试代码访问它们时,我不断收到

FileSystemNotFoundException
抛出的消息。

所以,现在我试图通过将它们放入

data
属性并直接读取它们来简单地使它们在测试期间可用。 但是,无论我在测试代码中做什么,我都会抛出
FileNotFoundException

我尝试过打开:

  • "resources/inputs/my/pkg/ISimple.java"
  • "inputs/my/pkg/ISimple.java"
  • System.getenv("JAVA_RUNFILES") + "/resources/inputs/my/pkg/ISimple.java"
  • System.getenv("JAVA_RUNFILES") + "/inputs/my/pkg/ISimple.java"
  • System.getenv("RUNFILES_DIR") + "/resources/inputs/my/pkg/ISimple.java"
  • System.getenv("RUNFILES_DIR") + "/inputs/my/pkg/ISimple.java"
  • System.getenv("PWD") + "/resources/inputs/my/pkg/ISimple.java"
  • System.getenv("PWD") + "/inputs/my/pkg/ISimple.java"

但我总是会遇到

FileNotFoundException
被抛出。

我编写了第二个“测试”,它从 PWD 目录执行“tree”命令,并将结果放入断言中(失败),并验证我确实从工作目录中看到了

resources/...
。 但是,当我尝试打开文件时,我仍然得到
FileNotFoundException
(
ISimple.java
)。

我在这里缺少什么?

bazel bazel-rules bazel-java
1个回答
0
投票

抱歉浪费了大家的时间。 这是我的错误。 我遇到了内部路径问题。 事实上,只需从

<path to project from workspace root>/resources/...
打开并读取文件就可以了。 虽然,我从文档中相信从
resources/...
读取应该可行,但事实似乎并非如此 - 至少对于不在 WORKSPACE 根目录的项目而言。

© www.soinside.com 2019 - 2024. All rights reserved.