2012-01-04 4 views
11

В моем приложении, я хотел бы использовать ресурс, который существует в папке media/src/main/resources/testMediaExifClassPathResource не получает путь к классам

Чтобы получить этот путь, я использовал этот кусок кода, который находится в 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 

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

ответ

5

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

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

+0

Вы совершенно правы!

+0

Файл Thhese .classpath автоматически генерируется, и я боюсь последствий, которые это изменение может иметь в другие тесты. По крайней мере, я знаю причину моей проблемы. благодаря –

17

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

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

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

new ClasspathResource("testMediaExif", getClass()) 

или

new ClasspathResource("testMediaExif", MyClass.class) 

Они будут строить Refernce на ресурс называется testMediaExif относительно MyClass.

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

+0

Спасибо, с вашим подходом проблема возникает, когда я пытаюсь получить абсолютный путь. новый ClasspathResource ("testMediaExif", getClass()) получает путь, где находится класс, но getAbsolutePath указывает на целевую папку снова –

Смежные вопросы