Можно ли изменить расположение среды выполнения java_library.data в пределах базы? - PullRequest
0 голосов
/ 22 марта 2019

На моем пути к миграции существующей сборки на bazel у меня есть подмодуль mod1, в котором есть несколько тестов JUnit для чтения файлов из каталога «testdata». При попытке загрузить эти файлы мне нужно использовать «mod1 / testdata / test.txt» вместо «testdata / test.txt», т. Е. Модульные тесты должны знать о соответствующем каталоге модуля bazel.

(1) Это правильное поведение для bazel 0.23.2@debian и 0.23.2-homebrew?

(2) Есть ли способ использовать тесты .java без изменений и устранить необходимость использования префикса "mod1" в данных / исполняемых файлах bazel?

Мой пример проекта находится здесь: https://gitlab.com/jhinrichsen/bazel-data-test. Я ищу способ использовать один и тот же путь "testdata / test.txt" как для корневого модуля, так и для субмодуля. В моем примере проекта bazel test AllTests завершается успешно, в то время как bazel test mod1/AllTests терпит неудачу, потому что мне нужно добавить "mod1 /" к "testdata / test.txt".

Не требуется решение на основе ресурсов / пути к классам, поскольку я не могу изменить существующие источники тестов.

1 Ответ

0 голосов
/ 25 марта 2019

Поведение, которое вы видите, действительно является правильным, и нет никакого способа убрать префикс «mod1» с нативными правилами Java.Все, что вы включаете в data, будет отображаться в собственном пакете так, как вы видите.

Причина этого довольно проста.Предположим, что ваша цель теста //mod1:AllTests также зависит от гипотетической библиотеки //mod2:tests.И скажем, что гипотетическая библиотека также имела testdata/test.txt в качестве зависимости данных.Несколько файлов test.txt будут конфликтовать, если они не будут помещены в пространство имен своих пакетов.

Если вы абсолютно не можете изменить исходный код теста, то вы в значительной степени застряли.Вот предыдущее обсуждение по этому поводу: https://groups.google.com/forum/#!topic/bazel-discuss/w6TDwSZvN0k

Я бы порекомендовал, если вы пытаетесь работать с Bazel, вы принимаете концепцию runfiles и модифицируете свои тесты, чтобы либо работать со структурой runfiles, либо принятьаргумент командной строки для поиска тестовых данных.

...