#java #spring-boot
#java #весенняя загрузка
Вопрос:
У меня есть приложение spring boot, которое зависит от другого jar, скажем, A. A нужны некоторые файлы в компоненте, скажем, MyBean. Итак, я поместил эти файлы в папку ресурсов проекта и с помощью следующего кода в конструкторе компонента я получаю их путь, который затем задаю в bean.
URL res = this.getClass().getClassLoader().getResource("fileNeededByMyBean.dat");
File file = Paths.get(res.toURI()).toFile();
String absolutePath = file.getAbsolutePath();
....use absolutePath in bean....
В IDE, такой как IntelliJ, проект работает нормально. Но когда я пытаюсь запустить его с помощью ‘java -jar app.jar ‘команда, она завершается ошибкой:
nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [x.y.z.MyBean]: Constructor threw exception; nested exception is java.nio.file.FileSystemNotFoundException
Как заставить его работать?
Ответ №1:
Jar-файл по сути представляет собой zip-архив. И java не может обрабатывать элемент zip-архива как файл.
Для чтения jar-файла формы ресурса используйте: this.getClass().getClassLoader().getResourceAsStream("fileNeededByMyBean.dat");
Запишите данные из ресурса во временный файл, затем используйте его абсолютный путь.
Комментарии:
1. Компонент из устаревшего проекта, и, следовательно, мне нужно передать ему абсолютный путь к файлу. Я думал о передаче пути к файлу в качестве аргументов командной строки, но не уверен, работает ли это.