@참고: https://nankisu.tistory.com/93

 

executable.jar 의 구조

src/main/resources 에 있는 service-config.properties 를 

executable jar 로 만들면 

jar 내부에 /resources/serivce-config.properties 로 묶인다.

 

executable.jar 내부의 파일 읽는법

1. local에서 코드를 실행시킬 때는 temp.txt 파일이 소스폴더에 독립적인 하나의 파일로 존재하기 때문에 정상적으로 실행된다.

// resources 폴더에 있는 temp.txt 파일을 읽어온다.

File file = new File(new ClassPathResource("temp.txt").getURI());

2. 개발계에는 jar파일이 실행되기 때문에 temp.txt가 독립된 파일이 아니라 jar파일의 데이터 일부분으로서 하나의 온전한 파일로 가져올 수 있다.

// File로 가져오는 것이 아니라 InputStream으로 내용을 읽어오도록 수정. InputStream is = new ClassPathResource("temp.txt").getInputStream();

 

1번에 의해 발생할 수 있는 에러

java.lang.IllegalArgumentException: URI is not hierarchical

이런 exception 이 나는 이유는 

path 가 rsrc:/ 와 같이 생성되기 때문이다.

따라서 path 로 읽으려 하면 안되고 2번의 이유에 의해서 inputstream 으로 읽어오는 것이다.

 

executable.jar 내부 파일 위치에 해당하는 path

이때, executable.jar 의 위치부터 경로를 정해주기 위해 path 는 "/" 로 시작해야 한다. 따라서 path = /resources/serivce-config.properties 여야 jar 내부에 /resources/serivce-config.properties 를 잘 가져온다.

내 경우에는 아래의 코드를 사용하였다.

InputStream is = clazz.getResourceAsStream(path);  

 

블로그 이미지

uchacha

개발자 일지

,