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 중국어 웹사이트의 기타 관련 기사를 참조하세요!