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")
:
- на
classpath:
префикс используется только в файлах конфигурации (например, XML-файлах) и не должен использоваться, если вы используетеClasspathResource
напрямую. -
classpath:testMediaExif
относится к ресурсу в корне classpath, а не относительно файла, в котором вы делаете ссылку.
попробуйте это вместо этого:
new ClasspathResource("testMediaExif", getClass())
или
new ClasspathResource("testMediaExif", MyClass.class)
они построят ссылку на ресурс называется testMediaExif
по отношению к MyClass
.
еще одно: ClasspathResource.getFile()
будет работать только в ресурс действительно является файлом. Если он упакован в банку, то не сработает.