0

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です。

どんな助けにも感謝します!前もって感謝します!

4

0 に答える 0