Не удалось получить ресурс, загрузчик классов и класс возвращает целевой путь - PullRequest
0 голосов
/ 10 января 2020

Я пытаюсь получить файл свойств из /src/main/resources/properties/, но по какой-то причине следующий код возвращает путь целевых классов вместо файлов sr c. Не могли бы вы помочь?

System.out.println(PropTest.class.getResource("/properties/app.properties"));
System.out.println(PropTest.class.getClassLoader().getResource("properties/app.properties"));
ClassLoader classloader = Thread.currentThread().getContextClassLoader();
System.out.println(classloader.getResource("properties/app.properties"));
PropTest prop=new PropTest();
System.out.println(prop.getClass().getResource("/properties/app.properties"));

Каждая строка выдает одинаковый вывод:

file:/C:/Users/b./eclipse-workspace/ordermonitoring/target/classes/properties/app.properties
file:/C:/Users/b./eclipse-workspace/ordermonitoring/target/classes/properties/app.properties
file:/C:/Users/b./eclipse-workspace/ordermonitoring/target/classes/properties/app.properties
file:/C:/Users/b./eclipse-workspace/ordermonitoring/target/classes/properties/app.properties

Ответы [ 2 ]

0 голосов
/ 10 января 2020

Поведение правильное. Ресурсы будут загружены из пути к классам. Во время выполнения не будет никакой папки sr c. Что вы можете сделать, это сделать / src / main / resources в качестве исходной папки (если вы не используете maven), чтобы свойства были скопированы в целевую папку.

0 голосов
/ 10 января 2020

Это ожидаемое поведение. Для проектов maven во время работы проект собирается и хранится в папке target всегда. Вы также можете изменить эту папку с помощью некоторой конфигурации. Из этой целевой папки ваше приложение запускается и, следовательно, ваш путь показывается в методе classloader.getResource(). Если вы строите банку, то ваши ресурсы будут внутри банки и всегда будут доступны. Так что classloader.getResource() будет работать нормально всегда.

...