在基于SBT的Scala项目中使用静态资源的最佳方法是使用sbt-assembly
或sbt-native-packager
等打包插件。
我们知道通过将TypeSafe-Config与sbt-native-packager
的通用插件一起使用,我们可以将配置文件放在资源目录下的源代码下。但是,如果我希望我的应用程序有其他静态源,例如包含映射的JSON文件和模型,该怎么办?
据我所知,我可以引用资源目录并从文件中读取,但是在使用插件打包应用程序之后仍然可以工作(假设在这种情况下使用通用或docker插件)?
如果没有,实现这一目标的正确方法是什么?
答案 0 :(得分:3)
您可以使用
unmanagedResourceDirectories += (baseDirectory in <project>).value / some / path
添加更多目录,这些目录稍后作为静态资源映射到jar中。
答案 1 :(得分:3)
将其放入资源目录,但不要“引用资源目录并从文件中读取”:改为使用ClassLoader.getResourceAsStream()
(或getResources
,具体取决于您的要求)。这是与TypeSafe Config相同的技术和无数其他库使用的技术。为此,如果您使用sbt-native-packager
,则无关紧要。
如果您需要将这些资源专门用作文件(例如将其提供给外部进程),则此方法会遇到问题。在这种情况下,请将它们添加到mappings
,如图所示here:
mappings in Universal in packageBin += file("README") -> "README"
(显然用您需要的文件替换"README"
。)