>  기사  >  Java  >  Spring Boot 앱이 JAR로 패키징되면 클래스 경로 리소스가 사라지는 이유는 무엇입니까?

Spring Boot 앱이 JAR로 패키징되면 클래스 경로 리소스가 사라지는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-01 17:28:30637검색

Why Do Classpath Resources Disappear When My Spring Boot App Is Packaged as a JAR?

JAR로 실행할 때 클래스 경로 리소스를 찾을 수 없음: 수수께끼 풀기

Spring Boot로 Java 애플리케이션을 구축할 때 클래스 경로 리소스를 활용하면 성능을 향상할 수 있습니다. 프로그램의 기능. 그러나 애플리케이션을 JAR 파일로 패키징한 후 이러한 리소스에 액세스하려고 하면 무서운 "FileNotFound" 예외가 발생할 수 있습니다. 이러한 불일치는 개발 중에 리소스를 처리하는 방법과 JAR 환경에서 리소스를 처리하는 방법의 근본적인 차이로 인해 종종 발생합니다.

문제

통합 개발에서 애플리케이션을 실행할 때 STS(Spring Tool Suite)와 같은 환경(IDE) 리소스는 파일 시스템에 있는 것으로 처리됩니다. 이는 Resource.getFile()을 사용하여 리소스에 액세스하는 것이 간단하고 원활하게 작동한다는 것을 의미합니다. 그러나 애플리케이션이 JAR로 패키징되면 리소스는 더 이상 파일 시스템 계층 구조의 일부가 아니라 JAR 아카이브에 포함됩니다.

해결 방법: getInputStream()의 힘 발휘

JAR 컨텍스트에서 리소스를 우아하게 처리하려면 다른 접근 방식을 수용하는 것이 중요합니다. 파일 시스템에서 직접 파일을 검색하려고 시도하는 Resource.getFile()을 사용하는 대신, 대신 Resource.getInputStream()으로 전환하세요. 이 메소드는 위치에 관계없이 리소스의 내용을 읽을 수 있는 입력 스트림을 반환합니다.

resource.getInputStream()을 사용하면 파일 시스템에 대한 종속성을 우회하고 리소스에 대한 완벽한 액세스를 보장할 수 있습니다. JAR 아카이브 내에 포함되어 있습니다. 따라서 개발 중이든 독립형 JAR 파일로 패키징 및 실행된 후에든 애플리케이션이 예상대로 작동합니다.

getInputStream()의 우아함

수용 Resource.getInputStream()의 단순성과 효율성을 설명하기 위해 앞서 제시된 예제 코드를 수정해 보겠습니다.

<code class="java">private void testResource(Resource resource) {
    try (InputStream is = resource.getInputStream()) {
        // Perform operations using the input stream...
        // ...
    } catch (IOException ex) {
        logger.error(ex.toString());
    }
}</code>

이러한 조정을 통해 애플리케이션은 개발 환경과 JAR 환경 모두에서 클래스 경로 리소스를 원활하게 탐색하여 원활한 연결을 제공합니다. "FileNotFound" 예외로 인한 불만을 경험하고 제거하세요.

위 내용은 Spring Boot 앱이 JAR로 패키징되면 클래스 경로 리소스가 사라지는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.