ClassPathResource не в classpath

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


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

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


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

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

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

new ClasspathResource("testMediaExif", getClass())

или

new ClasspathResource("testMediaExif", MyClass.class)

они построят ссылку на ресурс называется testMediaExif по отношению к MyClass.

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