ホームページ  >  記事  >  Java  >  Spring Boot アプリケーションを JAR として実行するとクラスパス リソースの検索に失敗するのはなぜですか?

Spring Boot アプリケーションを JAR として実行するとクラスパス リソースの検索に失敗するのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-03 11:25:02223ブラウズ

Why Does My Spring Boot Application Fail to Find Classpath Resources When Run as a JAR?

JAR として実行するとクラスパス リソースが見つかりません

この問題は、Spring で @Value アノテーションを使用してクラスパス リソースをロードするときに発生する可能性がありますアプリケーションを起動します。 STS などの IDE から実行すると正しく機能しますが、mvn パッケージ経由で生成された jar ファイルを実行すると FileNotFoundException が発生します。

問題への対処

根本的な理由はそのリソースです.getFile() は、リソースがファイル システム上で直接利用可能であることを期待します。ただし、JAR として実行すると、リソースがアーカイブ内にパッケージ化されるため、そのアプローチは無効になります。

解決策

この問題を解決するには、getFile() を getInputStream に置き換えます。 ()。このメソッドを使用すると、場所に関係なくリソースのコンテンツにアクセスできます。変更されたコードは次のとおりです:

<code class="java">@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application implements CommandLineRunner {

    private static final Logger logger = Logger.getLogger(Application.class);

    @Value("${message.file}")
    private Resource messageResource;

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Override
    public void run(String... arg0) throws Exception {
        // both of these work when running as Spring boot app from STS, but
        // fail after mvn package, and then running as java -jar
        testResource(new ClassPathResource("message.txt"));
        testResource(this.messageResource);
    }

    private void testResource(Resource resource) {
        try {
            InputStream inputStream = resource.getInputStream();
            logger.debug("Found the resource " + resource.getFilename());
        } catch (IOException ex) {
            logger.error(ex.toString());
        }
    }
}</code>

以上がSpring Boot アプリケーションを JAR として実行するとクラスパス リソースの検索に失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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