ClassPathResource не получает путь к классу - PullRequest
12 голосов
/ 04 января 2012

В моем приложении я хотел бы использовать ресурс, который существует в папке 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

Почему это указывает на целевой путь?Как я мог это изменить?

Ответы [ 2 ]

17 голосов
/ 04 января 2012

Есть две проблемы с new ClassPathResource("classpath:testMediaExif"):

  1. Префикс classpath: используется только в конфигурационных файлах (например, XML-файлах) и не должен использоваться, если вы используете ClasspathResource напрямую.
  2. classpath:testMediaExif относится к ресурсу в корне пути к классам, а не к файлу, в котором вы делаете ссылку.

Попробуйте вместо этого:

new ClasspathResource("testMediaExif", getClass())

или

new ClasspathResource("testMediaExif", MyClass.class)

Это создаст ссылку на ресурс с именем testMediaExif относительно MyClass.

Еще одна вещь: ClasspathResource.getFile() будет работать только на том ресурсе, который действительно является файлом. Если он упакован в JAR-файл, он не будет работать.

5 голосов
/ 04 января 2012

Я предполагаю, что проблема абсолютного пути из-за outputDirectory в цели вашего maven POM.В моем проекте outputDirectory war / WEB-INF / classes и отсюда выполняются классы.Если я изменю его на какое-то нежелательное значение, класс больше не будет выполняться.

Так что я считаю, что абсолютный путь должен что-то делать с расположением ваших файлов .class.Надеюсь, это поможет.

...