jar 사용에 관하여
글쓴이: mr.lee / 작성시간: 일, 2006/12/03 - 4:29오후
jar 로 압축할때 와일드카드를 써서 파일 필터링을 할 수 있는지요? 별 생각없이 죽 써왔는데 문득 그게 필요한데 해보니 안되는것 같아서 말이죠.
이를테면,
디렉토리 구조가 workspace/src/com/company/util/ 이렇게 되어 있고 util아래에 *.java 파일들과 .class 파일등등이 있다 쳤을때 말이죠.
cd workspace 해서 com부터 *.class 파일만 묶을려고 한다고 했을때
jar cvf test.jar -C src/ . 이렇게 하면 com아래 모든 파일이 다 묶이는거고.
jar cvf test.jar -C src/ * 이렇게 하면 에러나고..
jar cvf test.jar -C src/ *.class 이것도 마찬가지 에러.
또한,
cd src
jar cvf test.jar . 이렇게 하면 위 첫번째와 같고,
jar cvf test.jar * 이건 이번엔 에러안나고 위와 동일한 결과고
jar cvf test.jar *.class 이것은 역시 마찬가지로 에러
jar cvf.test.jar .class 뭐 이것도 역시나 에러.
find com/ -name '*.class' | jar cvf test.jar 뭐 이것도 안되는군요.
물론, 쉘스크립트에서 find를 이용해서 리스트를 만들고 그 값으로 jar를 수행시키면 되겠지만..
jar에서 바로 하는 방법은 원래 없었나보죠?
Forums:
좀 다른
좀 다른 방향입니다만,
아주 빌드를 다른 디렉토리에 하시는건 어떤가요?
빌드시에 -d 옵션으로 classes 등의 디렉토리에 하는걸 봐서요.
-----------------
한글을 사랑합니다.
-----------------
한글을 사랑합니다.
아네..위피 개발을
아네..위피 개발을 리눅스에서 하다보니 필요성이 생겨서요. 원래 안되는거던가 궁금하기도 하구요.
음.. 제가
음.. 제가 쉘스크립트를 만들어 봤습니다. 아마 유용하게들 사용하실 상황도 있으리라 생각합니다.
스크립트명은 kar.sh 이며 사용법은 그냥 kar.sh 만 (실행가능 속성 있는 상태에서) 입력하면 나오구요.
윈도우+cygwin 에서는 cygwin/bin 패스가 PATH에 잡혀 있는 상태에서 bash kar.sh 하시면 되겠네요.
윈도우 커맨드에도 find가 있기 때문에 find_cmd는 절대경로로 대입하셔서 사용하시면 좋겠죠. (PATH 우선순위 따라 안해도 될수도 있겠지만)
(사용예)
패키지명은 com.company.util 이 된다.
workspace/src/com/company/util/ 아래에 *.class 와 *.java 파일들이 있다고 했을때 혹은 .svn 의 여러 파일들이 있을수도 있겠다.
workspace/out/ 안에 class (혹은 java) 파일들만 묶은 jar를 만들어 넣고 싶을때
cd workspace
리눅스: $ kar.sh cvf out/test.jar src *.class
윈도우: bash kar.sh cvf out/test.jar src *.cass
이것은 원래 jar의 용법인 (에러는 나지만)
jar cvf out/test.jar -C src *.class
와 같은 형태의 구문이므로 사용하시기가 쉬울것입니다.
cvf[M], uvf[M] 등의 옵션을 사용할때 사용하시면 되겠으며..약간의 수정이 필요하겠지만 패턴은 find에서 사용할 수 있는 모든 옵션과 표현식을 이용할 수 있겠죠.
이를테면, -name 이나 -iname이 아닌 정규표현식으로 원하는 모든 리스트를 긁어오고 싶다면..
kar.sh 의 $find_cmd . -name 부분을 find a -regextype egrep -iregex 이렇게 바꾸고
$ kar.sh cvf out/test.jar src ".+\.(class|java)"
이렇게 하면 class와 java 파일들만 모을 수 있겠네요.
댓글 달기