ClassPathResource не получает путь к классам
В моем приложении я хотел бы использовать ресурс, который существует в папке media/src/main/resources/testMediaExif
Чтобы получить этот путь, я использовал этот фрагмент кода, расположенный в media/src/main/java/com/project/MyClass.java
:
ClassPathResource resource = new ClassPathResource("classpath:testMediaExif");
File file = resource.getFile();
String absolutePath = file.getAbsolutePath();
Показанная ошибка:
java.io.FileNotFoundException: class path resource [classpath:testMediaExif] cannot be resolved to URL because it does not exist
Если я изменил этот код:
ClassPathResource resource = new ClassPathResource("testMediaExif");
Переменная absolutePath принимает это значение:
/Users/blanca/desarrollo/media/target/test-classes/testMediaExif
Почему он указывает на целевой путь? Как я могу его изменить?
Ответы
Ответ 1
Моя догадка заключается в том, что проблема абсолютного пути заключается в том, что outputDirectory задан в вашем maven maven. В моем проекте outputDirectory war/WEB-INF/classes и это отсюда классы выполняются. Если я изменю его на некоторое значение нежелательной почты, класс больше не будет выполнен.
Итак, я считаю, что абсолютный путь должен что-то сделать с расположением ваших файлов .class. Надеюсь, это поможет.
Ответ 2
Есть две проблемы с new ClassPathResource("classpath:testMediaExif")
:
- Префикс
classpath:
используется только в файлах конфигурации (например, файлы XML) и не должен использоваться, если вы используете ClasspathResource
напрямую.
-
classpath:testMediaExif
относится к ресурсу в корневой части пути к классам, а не к файлу, в котором вы делаете ссылку.
Попробуйте это вместо:
new ClasspathResource("testMediaExif", getClass())
или
new ClasspathResource("testMediaExif", MyClass.class)
Они построят ссылку на ресурс с именем testMediaExif
относительно MyClass
.
Еще одна вещь: ClasspathResource.getFile()
будет работать только в ресурсе, это файл. Если он упакован в JAR, то это не сработает.