ホームページ >Java >&#&チュートリアル >JAR として実行するとクラスパス リソースが見つからないのはなぜですか?

JAR として実行するとクラスパス リソースが見つからないのはなぜですか?

DDD
DDDオリジナル
2024-11-03 16:50:03781ブラウズ

Why Does Classpath Resource Missing When Running As JAR?

JAR として実行するとクラスパス リソースが見つからない

@Value アノテーションを使用してクラスパス リソースをロードすると、実行時にファイルが見つからない例外が発生する場合がありますアプリケーションを JAR ファイルとして保存します。リソースが src/main/resources ディレクトリに存在し、JAR ファイル内で確認されているにもかかわらず、この問題は、クラスパス リソースが異なるコンテキストで処理される方法に矛盾があるために発生します。

問題の理解

問題は resource.getFile() の使用にあります。このメソッドは、ファイル システム上でリソースにアクセスできることを想定しており、JAR ファイル内にネストされたリソースを処理できません。 STS 内でアプリケーションを実行する場合、ファイル システム上でリソースに直接アクセスできるため、この方法は機能します。ただし、JAR ファイルから実行する場合、リソースは JAR ファイル内に配置され、ファイル システムから直接アクセスできません。

代替解決策

これを解決するにはこの問題を解決するには、resource.getFile() の代わりに resource.getInputStream() を使用することをお勧めします。このメソッドを使用すると、場所に関係なくリソースのコンテンツにアクセスできます。以下に例を示します。

<code class="java">try (BufferedReader reader = new BufferedReader(new InputStreamReader(messageResource.getInputStream()))) {
  // Read and process the resource's content here
}</code>

このアプローチにより、アプリケーションを JAR ファイルとして実行するときにリソースが正しくアクセスされ、ファイルが見つからない例外が排除されます。

以上がJAR として実行するとクラスパス リソースが見つからないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。