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() будет работать только в ресурс действительно является файлом. Если он упакован в банку, то не сработает.