엄범

 

  • resources 이하에 있는 파일들(.yml, .properties, 인증서 등)은 컴파일 타임에 .jar에 포함되어 빌드된다.
    • 그래서 리소스를 ClassPath 사용해서 제대로 불러왔다면 `` build/resources``를 통째로 날려도 잘 실행 된다.
    • yml 등은 알아서 jar 내에 있는 것을 사용한다.
  • 다만 소스코드 내에서 ClassPath를 쓰지 않고 그냥 File에 접근하게 되면, 실제 파일시스템에 있는 해당 경로로 가서 해당 파일이 있는지를 찾는다.
    • 이 때 해당 파일이 지워져있다면? 당연히 못찾는다.
    • 경로를 상대경로로 지정한 경우? 상대경로는 java -jar 명령어를 실행하는 위치에 따라 결정되기 때문에, 어디서 명령어를 실행하느냐에 따라 파일을 못찾을 수 있다.

```kt

FileInputStream(filePath)   --- X / 실제 파일시스템에서 파일을 찾는다
ClassPathResource(filePath).inputStream   --- O / jar 내에서 찾는다

```

  • 위와 같이 jar 내에서 가져오도록 하는 것이 좋다.