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, то это не сработает.