2016-10-11 6 views
0

sbt-assemblyまたはsbt-native-packagerのようなパッケージングプラグインを使用して、SBTベースのScalaプロジェクトで静的リソースを使用する最良の方法は何ですか?Scala SBTプロジェクトで静的資産を使用する正しい方法は何ですか?

sbt-native-packagerのユニバーサルプラグインでTypeSafe-Configを使用することで、設定ファイルをsourcesのresourcesディレクトリに置くことができます。しかし、アプリケーションに、マッピングやモデルを含むJSONファイルなどの他の静的ソースを持たせたいのであればどうしますか?

リソースディレクトリを参照してファイルから読み込むことはできますが、プラグインを使用してアプリケーションをパッケージ化した後でも機能することがわかります(この場合はユニバーサルまたはドッカープラグインと仮定します)。

そうでない場合、これを達成する正しい方法は何ですか?

答えて

2

リソースディレクトリに入れますが、リソースディレクトリを参照してファイルから読み取らないでください。代わりにClassLoader.getResourceAsStream()(またはgetResources、必要に応じて)を使用してください。これはTypeSafe Configと無数の他のライブラリが使用するのと同じテクニックです。このため、sbt-native-packagerを使用するかどうかは関係ありません。

このアプローチは、これらのリソースをファイルとして(たとえば、外部プロセスにフィードするために)特別に利用できるようにする必要がある場合に問題になります。 here示すように、この場合mappingsに追加します:

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

(明らかにあなたが必要とするファイル(複数可)と"README"を置き換えます)。

2

あなたは

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

は後でjarファイルなどの静的リソースにマッピングされている複数のディレクトリを追加するために使用することができます。

関連する問題