Файлы, которые были упакованы в JAR, больше не доступны из файловой системы.Это можно увидеть, глядя на URL
, возвращаемое из myClass.getResource("file.txt")
, например:
/home/sria/cde-spark-assembly-1.0.jar!/file.txt
Обратите внимание на !
, обозначающее, что файл упакован в JAR.
Это означает, что вам всегда нужно обращаться к файлам ресурсов, используя следующий шаблон:
Для файла в src/main/resources/file.txt
:
myClass.getResourceAsStream("file.txt")
Существует две причины, по которым вы не можетехотите сделать это:
- Добавление файлов в каталог ресурсов увеличит размер файла JAR.
- Доступ к файлу невозможен с использованием стандартных операций файловой системы.
В качестве альтернативы вы можете загрузить файл из (настраиваемого) пути в файловой системе, используя, например:
val inputStream = new BufferedInputStream(new FileInputStream(myPath))
( ссылка )
Таким образом, вы можете загрузить файл, например, относительно пути к файлу JAR или каталога выполнения .
Надеюсь, это поможет.
Примечание: И sbt package
, и sbt assembly
будут упаковывать файлы ресурсов в JAR.