Как получить .properties?

#java #maven #resources

#java #maven #Ресурсы

Вопрос:

Я разрабатываю настольное Java-приложение с использованием maven. Я получил файл *.properties, который мне нужно повторно получить во время выполнения (src / resources /application.properties). Единственное, что приходит мне в голову, это использовать:

 private Properties applicationProperties;
applicationProperties.load(new BufferedInputStream(new FileInputStream("src/resources/application.properties")));
  

Это сработало бы, если бы я запускал свое приложение непосредственно из IDE.
Я хочу сохранить четкую иерархию выходных данных, поэтому я настроил maven на копирование папки ресурсов непосредственно в целевую папку (которая является basedir для выходного приложения). Таким образом, файл application.properties загружаться не будет (поскольку у меня есть target / resources /application.properties, но нет target / src / resources / application.properties).

Каков наилучший способ управления ресурсами, чтобы они работали как при отладке из IDE, так и при непосредственном запуске встроенного файла jar?

Ответ №1:

Не ожидайте, что файлы будут в src папке — она не существует во время выполнения. Файлы свойств переходят в /bin . Но и на это не полагайтесь. Потому что FileInputStream принимает только абсолютные пути.

Когда вам нужен classpath-относительный путь, используйте:

 InputStream is = YourClass.class.getResourceAsStream("/a.properties")`
  

(maven отправляет файлы из /src/main/resources в корень classpath)

Ответ №2:

Вы должны загрузить файл свойств из classpath, а не из явного расположения файловой системы:

  applicationProperties.load(new BufferedInputStream(this.getClass().getResourceAsStream( "/application.properties" );
  

Пока ваша среда IDE настроена на включение каталога ресурсов в ваш classpath (это должно быть по умолчанию в Maven), это будет работать независимо от того, работаете вы в среде IDE или нет, поскольку maven скопирует ресурсы в нужное место при упаковке вашего архива.