java.nio.file.Исключение FileSystemNotFoundException с spring app jar

#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. Компонент из устаревшего проекта, и, следовательно, мне нужно передать ему абсолютный путь к файлу. Я думал о передаче пути к файлу в качестве аргументов командной строки, но не уверен, работает ли это.