Jetty バージョンから Web アプリケーション内にリソース ファイルをロードする際に問題に直面しています9.4.37.v20210219。
Thread.currentThread().getContextClassLoader()クラスローダーインスタンスを取得してから、リソースをストリームとして取得しようとしていますclassLoader.getResourceAsStream("resourceFileName")。このコード行は、jetty バージョンから null を返します9.4.37.v20210219。
クラスローダのインスタンスを jetty バージョン9.4.37.v20210219とでログに記録して比較検討すると9.4.36.v20210114、以下の違いがわかります
桟橋9.4.37.v20210219で、私は得る
startJarLoader@1c4af82c
しかし、jetty 9.4.36.v20210114 を使用すると、
WebAppClassLoader{984235065}@3aaa3c39
startJarLoader は jetty サーバーのクラスパスを示していますか? webapp からリソース ファイルを読み込む標準的な方法は何ですか?
追加情報、私の Web アプリケーションはデプロイされJETTY_BASE/webappsており、その中にロードしようとしているリソース ファイルがあります。この webapp には、 にデプロイされた依存関係の jar がありJETTY_BASE/lib/extます。Thread.currentThread().getContextClassLoader()依存関係の jar から呼び出される webapp 内のメソッドで使用されます。つまり、呼び出されたスレッドは webapp の依存関係 jar に属し、サーバー クラスパス/親クラス ローダーにあります。これが私が推測する理由ですが、この違いがjetty9.4.37.v20210219以降のバージョンで見られる理由を知りたいです。
ところで、MyClass.class.getClassLoader()リターンWebAppClassLoader{984235065}@3aaa3c39を行うと、同じものを使用してリソースをストリームとして取得できましたclassLoader.getResourceAsStream("resourceFileName")が、 jetty version との動作に違いがある理由を知りたい9.4.37.v20210219です。
どんな助けにも感謝します!前もって感謝します!