잡동사니를 모아두는 서랍장
jar 파일 실행 시 내부 리소스를 못읽는다면 확인해볼 사항 본문
reasource 내의 파일 내용을 참조해야하는 로직이 있었다. 늘 그렇듯 자연스럽게 File 을 사용했다.
ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
File myFile = new File(getClass().getClassLoader().getResource("test.yaml").toURI()); //error
MyTemplate myTemplate = mapper.readValue(myFile, MyTemplate.class);
로컬에서 ide로 실행시켰더니 멀쩡히 동작. 그래서 다 됐다~하며 도커에 올리려니...
Caused by: java.lang.IllegalArgumentException: URI is not hierarchical
아래와 같은 메세지와 함께 실행되지 않는 것이다!
멘붕...왜지??
찾아보니까 내가 몰랐던 한가지, jar 내부에서 리소스를 file 로 읽으려고 들면 안된다...
그래서 getResourceAsStream 으로 변경하여 InputStream 으로 받았다. getResourceAsStream 은 jar 로 패키징되도 내부 파일을 직접 읽을 수 있다!
InputStream inputStream = getClass().getClassLoader().getResourceAsStream("test.yaml");
MyTemplate myTemplate = mapper.readValue(inputStream, MyTemplate.class);
참고)
stackoverflow.com/questions/10144210/java-jar-file-use-resource-errors-uri-is-not-hierarchical
'Java' 카테고리의 다른 글
Java Reflection 으로 인스턴스 생성하는 예시 (0) | 2020.12.03 |
---|---|
객체지향 5원칙(SOLID) (0) | 2020.12.02 |
jar, war, ear 차이 (0) | 2020.02.01 |
Comments