#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 скопирует ресурсы в нужное место при упаковке вашего архива.