アプリケーションで Spark Framework を使用しています。
staticFileLocation("/META-INF/resources/");
そこにcssおよびjsファイルを含むwebjarを使用できるようにします。src/main/resources/META-INF/resources
また、gradle ビルドがそこからリソースを取得するため、プロジェクト フォルダーに独自のリソースを配置しています。
私のビルドでは、すべてが 1 つの jar にまとめられ、すべてのファイルが Spark によって完全に提供される、fat-jar アプローチを使用しています。
私の問題は、いくつかの単体テストを Eclipse からスタンドアロンで実行すると、webjar がクラスパス上にあることを確認したにもかかわらず、Spark によって提供されず、自分のプロジェクトの静的リソースのみが提供されることです。
@Test
public void testStartup() throws InterruptedException {
InputStream schemaIS = this.getClass().getClassLoader().getResourceAsStream("META-INF/resources/webjars/bootstrap/3.2.0/js/bootstrap.min.js");
System.out.println(schemaIS == null);
staticFileLocation("/META-INF/resources/");
// depending on the trailing / the bootstrap js is found, but Spark never serves it
}
これはクラスローダーと関係があると思いますが、これを機能させる方法が見つかりません。Spark コードをThe thread context class loader will be used for loading the resource.
見ると、コード自体が末尾のスラッシュを削除していることもわかります。これにより、プレーンなgetResourceAsStream
.
これは Spark のバグですか、それとも正しく動作させる方法はありますか?