可以在bazel中更改java_library.data运行时位置吗?

时间:2019-03-22 20:58:49

标签: bazel

在将现有内部版本迁移到bazel的方式中,我有一个子模块mod1,该子模块具有一些JUnit测试,这些测试从“ testdata”目录中读取文件。尝试加载这些文件时,我必须使用“ mod1 / testdata / test.txt”而不是“ testdata / test.txt”,即,单元测试必须知道其对应的bazel模块目录。

(1)这对于bazel 0.23.2@debian和0.23.2-homebrew是正确的行为吗?

(2)有没有一种方法可以使用.java测试而无需更改,并且不需要在bazel数据/运行文件中使用“ mod1”前缀?

我的示例项目在这里:https://gitlab.com/jhinrichsen/bazel-data-test。我正在寻找一种对根模块和子模块使用相同路径“ testdata / test.txt”的方法。在我的示例项目中,bazel test AllTests成功,而bazel test mod1/AllTests失败,因为我需要在“ testdata / test.txt”之前加上“ mod1 /”。

由于我无法修改现有的测试源,因此没有寻找基于资源/类路径的解决方案。

1 个答案:

答案 0 :(得分:0)

您看到的行为确实是正确的行为,并且无法使用本机Java规则剥离“ mod1”前缀。 data中包含的所有内容都将按照您看到的方式限制在其自己的包中。

原因很简单。假设您的测试目标//mod1:AllTests也依赖于假设的//mod2:tests库。假设假设的库 也有一个testdata/test.txt作为数据依赖项。除非将多个test.txt文件命名为它们的软件包的名称空间,否则它们将发生冲突。

如果您完全不能修改测试源,那么您就很困。这是关于此的先前讨论: https://groups.google.com/forum/#!topic/bazel-discuss/w6TDwSZvN0k

如果您要尝试使用Bazel,我建议您接受运行文件的概念,并修改测试以使其与运行文件结构一起使用,或者接受用于在何处找到测试数据的命令行参数。 / p>