|
2008년 10월 16일
이번에 자바 프로젝트를 진행하면서 프로젝트를 jar로 패키징 하였습니다. 기분 좋게 패키징을 완료하고 jar를 실행 시켰는데 프로젝트의 메타파일을 읽어 들이는 부분에서 FileNotFoundException 예외가 발생하였습니다. 문제의 원인은 이클립스에서 실행하기 위해 메타 파일의 상대경로를 이클립스 실행 기준에 맞추어서 지정해 놓았기 때문이었습니다. 다음은 제가 이번에 프로젝트를 진행하면서 겪었던 문제를 간단한 예제 코드로 작성해 보았습니다. 보시는 봐와 같이 보통 자바 입문서에 나오는 파일을 읽어오는 소스입니다. test.txt를 메타파일이라고 가정하겠습니다.
![]() 아래는 위 소스를 이클립스에서 실행 시키기 위한 test.txt의 경로 입니다.
![]() 위 소스를 이클립스에서 실행 시키면 test.txt파일의 내용아 아 ~ 주 ~ 잘 읽어 들입니다. 하지만 jar로 패키징 한 후 실행 시켜 보면 ... FileNotFoundException을 발생시키지요 ;; 아 ~ 이거 어떻게 해야하지 ... 결국 부장님께 여쭤보니 ClassLoader 클래스의 getResourceAsStream 메소드를 알려주셨습니다. ClassLoader 클래스는 자바의 클래스 로더를 개발자가 사용할 수 있도록 만들어 놓은 클래스인데요 ... 음 .. 그게 저도 아직 클래스 로더에 대한 공부가 만족스럽지 못해 자세한 설명은 못 드리겠네요 ... 에헴 ... 다음에 공부를 더 해서 포스팅 해 놓도록 하겠습니다. 어쨌든 ClassLoader 클래스의 getResourceAsStream 메소드를 이용하면 현재 클래스가 로드 된 위치의 파일의 InputStream을 리턴해 줍니다. 그럼 이 녀석을 이용해서 파일을 읽을 수 있겠죠 ~ 그리고 test.txt파일의 위치를 자바 소스가 있는 경로로 옮겨 주시면 jar로 패키지한 파일을 실행 시킬 때도, 이클립스에서 실행 시킬 때도 test.txt 파일의 경로를 바꿔주지 않고도 동일한 방법으로 test.txt파일을 읽어들일 수 있습니다. 물론 jar로 패키지 할 때 test.txt 파일로 함께 묶어 주어야 하겠죠? 참고로 test.txt파일을 자바 소스있는 위치로 옮겨주는 이유는 이클립스 3.4 버전에서 (그 이하 버전은 사용해 본 적이 없어서 잘 모르겠네요 ;;) src폴더에 있는 파일들은 빌드가 되면 bin폴더로 옮겨지는데 bin폴더가 바로 자바 파일이 빌드 된 클래스 파일들이 모이는 곳이고 이 클래스 파일들이 모이는 곳에 test.txt파일을 옮겨주어야 ClassLoader에서 getResourceAsStream 메소드를 호출해 주었을 때 text.txt파일을 읽어들여 InputStream 객체를 리턴할 수 있기 때문입니다.
![]() 패키징 된 jar 파일에 text.txt 파일의 위치입니다. 이렇게 jar파일을 묶을 수 있도록 build.xml을 코딩해 주어야 하겠죠? 아참, 저는 jar를 묶을 때 ant를 이용합니다. ![]() 아래는 위 문제를 해결한 예제 소스입니다. ^^ ![]() |
ABOUT
![]() 새로운 도전을 위해 약 1년간 자리를 비웁니다. 그 동안 블로그에 방문해 주신 분들께 진심으로 감사드립니다. 1년 뒤 .NET 관련 양질의 정보를 가지고 돌아오겠습니다. by greenfrog 메모장
카테고리
최근 등록된 덧글
잘 봤습니다. 그런데 저 상태에서 하얀..
by 비니 at 07/24 안녕하세요. 내용이 좋아서 참고합니다... by 김현수 at 07/09 1년뒤....너무 멀군요... 도전 성.. by rince at 06/26 좋은 내용이네요 많은 도움이 되었습니다.. by 이준배 at 06/04 좋은 정보 감사합니다^^ by 코즈 at 06/03 사랑합니다 by 최곱니다 at 05/12 좋은정보 감사합니다. by 이창열 at 05/11 좋은 정보 잘보고갑니다 그리고 제가 .. by Cherry at 04/27 답글이 늦어서 죄송합니다. 요즘 이래저.. by greenfrog at 04/20 좋은 정보 잘보고 갑니다^^ 도움이 많.. by 토끼 at 04/15 좋은 정보 감사합니다. 다음에 써먹어야.. by neptunex at 03/26 ㅎㅎ 잘 찾아보면 재미있는 플러그인 많.. by greenfrog at 03/22 예전에는 일부러 에러내고 그거찾아가는.. by 규학 at 03/13 아 ~ 그 일이었군요 ^^ 글 잘 봤어요 .. by greenfrog at 02/21 하나은행과 정말 생동감 넘쳤지요 ^^ by rince at 02/20 rince님의 생동감 넘치는 하루가 궁금.. by greenfrog at 02/20 어제, 그제 정말 생동감 넘치는 하루.. by rince at 02/19 저도 짬 비릴때 고참들이 웃기면 그것 .. by greenfrog at 02/19 전 자주 웃는 편이지요 ^^; 군대에선 .. by rince at 02/18 저도 이 만화 보고 어쩜 저런 생각 없는 .. by greenfrog at 02/17 최근 등록된 트랙백
자바로 작성된 프로그램 단 한번만 실..
by Start!!! 제 취향이 Oddly Enough와 안성맞.. by Oddly Enough 2009년 보기 시작하는 미드 by Pell's seer Blog [포토] 국민 여러분, 떡국 드시고 .. by Green Monkey Blog** MARVEL MOVIES : 아이언 맨 by 잠보니스틱스 ▶◀ 최진실씨, 삼가 고인의 명복을 .. by ** MY's kitchen ** 재미로 해보는 MBTI 검사 by A2공간 - 도움되는 글을 쓰자 러시아 극우조직 스킨헤드를 파헤친 기자 by Oddly Enough [Sleeping Through My Fingers].. by 바람나무, 생각가는대로 구글 크롬 안내서의 작지만 큰 실수 by Oddly Enough PETA, 돼지학대 농장 잠입취재 by Oddly Enough 병쭈니의 생각 by chrisjun82's me2DAY 준이아빠의 생각 by kkh1030's me2DAY 안철수가 말하는 "현대의 인재에.. by loading... 100% 이전블로그
이글루 파인더
|