我在 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
)。
我在这里缺少什么?
抱歉浪费了大家的时间。 这是我的错误。 我遇到了内部路径问题。 事实上,只需从
<path to project from workspace root>/resources/...
打开并读取文件就可以了。 虽然,我从文档中相信从 resources/...
读取应该可行,但事实似乎并非如此 - 至少对于不在 WORKSPACE 根目录的项目而言。