반응형

상황

로컬(IDE) 환경에서 잘 실행되던 로직인데,
Jar
파일로 실행할때 에러 발생 (FileNotFoundException)

Log

 java.io.FileNotFoundException: src/main/resources/keystore/server.truststore (그런 파일이나 디렉터리가 없습니다)

 

원인

에러가 생기는 부분은 아래와 같다.

 File trustStoreFile = new File(trustStoreFilePath);
  • jar로 실행시에는, IDE에서의 file 시스템과 경로가 다름
  • 로컬 IDE 환경에서 File을 사용하려 하면 file:// 로 시작되는 url (실제 파일 시스템으로 접근)
    Jar 실행 환경에서 File을 사용하려 하면 jar://로 시작되는 url

 

반응형

해결 방법

inputStream을 이용

// 수정전
File file = new ClassPathResource(filePath).getFile();


// 수정후
InputStream instream = new ClassPathResource(filePath).getInputStream();

// InputStream 을 이용해 File 생성 후 사용하는 방법
File somethingFile = File.createTempFile("test", ".txt");
try {
    FileUtils.copyInputStreamToFile(inputStream, somethingFile);
} finally {
    IOUtils.closeQuietly(inputStream);
}

 

주의!

  • File Path 변경
    기본
    classpath: src/main/resource
    filePath=
    src/main/resource/keystore/test.jks
    => (아래로 수정)
    filePath=keystore/test.jks

  • ClassPathResource(filePath).getFile();에서 에러 발생
    java.io.FileNotFoundException: class path resource [파일] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/....

 

 

자세히 알고 싶다면 아래에서 확인

참고 - https://sonegy.wordpress.com/2015/07/23/spring-boot-executable-jar%EC%97%90%EC%84%9C-file-resource-%EC%B2%98%EB%A6%AC/

반응형

+ Recent posts