Как прочитать файл из файловой системы во время сборки модуля Maven - PullRequest
0 голосов
/ 02 марта 2020

У меня есть проект Maven A (упакованный как pom), содержащий проект модуля Maven B (упакованный как jar). Проект B также физически находится в root проекта A.

Когда строится B, плагин косвенно использует мой код (внутри B) для доступа к файлу свойств в своем расположении src / main / resources.

Когда я собираю проект B напрямую (mvn clean install), код может легко найти этот файл с помощью new File("src/main/resources/foo.properties");

Однако, когда я пытаюсь собрать проект A, он сначала попытается собрать модуль B, и в этом случае он не может найти файл свойств.

Помимо варианта «Новый файл», я пытался использовать this.getClass().getClassLoader().getResourceAsStream("src/main/resources/foo.properties");

и пытался использовать Spring:

Resource resource = new ClassPathResource("src/main/resources/foo.properties");

Оба также с префиксом "/". Но файл просто не может быть найден.

Почему это? Может быть, он ищет файл в root из A? Можно ли найти файл в модуле B при сборке A?

Спасибо!

1 Ответ

2 голосов
/ 02 марта 2020
new File("src/main/resources/foo.properties");

Это путь относительно рабочего каталога. Рабочий каталог находится там, где вы назвали Maven. Вот почему он не будет работать при вызове maven где-либо, кроме каталога модуля B.

this.getClass().getClassLoader().getResourceAsStream("src/main/resources/foo.properties");

Это не будет работать, потому что путь к классам - это то место, куда maven поместил классы, то есть target/classes .

Вам нужно добавить этот файл как ресурс в сборку maven, а затем использовать идею getResourceAsStream с правильным путем. Поскольку вы использовали стандартную раскладку Maven, вам, вероятно, ничего не нужно и просто используйте

this.getClass().getClassLoader().getResourceAsStream("foo.properties");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...