2016-10-11 3 views
0

Каков наилучший способ использования статических ресурсов в проекте Scala на основе SBT с плагином для упаковки, например sbt-assembly или sbt-native-packager.Каков правильный способ использования статических активов в проекте Scala SBT?

Мы знаем, что с помощью TypeSafe-Config с универсальным плагином sbt-native-packager мы можем просто поместить файл конфигурации в каталог ресурсов из источников. Однако, что, если я хочу, чтобы мое приложение имело другие статические источники, такие как файлы JSON, содержащие сопоставления и модели?

Я понимаю, что я могу просто ссылаться на каталог ресурсов и читать из файла, но будет ли он работать после упаковки приложения с помощью плагинов (если в этом случае использовать универсальный или докерный плагин)?

Если нет, то каков правильный способ достижения этого?

ответ

2

Поместите его в каталог ресурсов, но не «ссылайтесь на каталог ресурсов и читайте из файла»: вместо этого используйте ClassLoader.getResourceAsStream() (или getResources, в зависимости от ваших требований). Это тот же метод, что и TypeSafe Config, и используют неисчислимые другие библиотеки. Для этого не имеет значения, используете ли вы sbt-native-packager или нет.

Этот подход сталкивается с проблемами, если вам нужно сделать эти ресурсы доступными специально как файлы (например, для их подачи во внешний процесс). В этом случае добавить их к mappings, как показано here:

mappings in Universal in packageBin += file("README") -> "README" 

(очевидно, заменив "README" с файлом (ов) Вам нужно).

2

Вы можете использовать

unmanagedResourceDirectories += (baseDirectory in <project>).value/some/path 

добавить больше каталогов, которые затем сопоставляются в банку, как статические ресурсы.

Смежные вопросы