|
2008년 10월 05일
자바로 프로젝트를 진행하다 보면 프로젝트를 jar로 묶거나 또는 문서화를 하는 등의 작업을 해야 할 경우가 있습니다. 그런데 이러한 작업을 하려면 이클립스에서 설정을 해주거나 또는 콘솔에서 명령을 넣어줘야 하죠? 이는 한 번만 한다면 상관이 없겠지만 여러번 같은 작업을 수행할 경우 여간 성가신 작업이 아닐 수 없습니다. 게다가 개발자라면 단순 반복하는 작업의 경우 자동화를 시켜 놓는것은 누구나 생각하는 것이겠습니다. ![]() ![]() Ant 빌드파일은 XML로 작성되며, 하나의 project 요소를 가집니다. project 요소는 target 요소를 포함하고, 각 target 요소는 여러 개의 태스크 요소를 포함합니다. 간략한 구조는 아래와 같습니다. ![]() 타깃 간의 의존 관계는 target 요소의 depends 속성으로 기술합니다. 위의 빌드 스크립트에서 dist 타깃은 compile 타깃에 의존합니다. 결국 all 타깃은 의존 관계에 의해 compile -> dist -> clean 순으로 동작이 완료 된 후에 실행 되게 됩니다. target요소는 여러 가지 태스크를 가질 수 있는데, 여기서는 예제에서 사용할 몇 가지만 살펴보도록 하겠습니다. 나머지는 Ant 메뉴얼을 참고하세요 ~
이름과 값으로 속성을 지정합니다. 속성에서는 대소문자를 구별합니다. 다음은 foo.src라는 이름의 속성으로 "src"를 지정합니다. <property name="foo.src" value="src" /> 빌드 스크립트의 다른 부분에서 이 속성을 참조하려면 "${foo.src}"와 같이 쓰면 됩니다. <javac srcdir="${foo.src}" destdir="${build}" /> 다음과 같이 파일을 읽어 속성을 설정할 수도 있습니다. 이건 어떻게 하는 건지 확인을 못해 봤네요 ㅡㅜ <javac file="foo.properties" /> mkdir 새로운 디렉토리를 만들때 쓰며 다음과 같은 식으로 사용합니다. <mkdir dir="${dist}" /> <mkdir dir="${dist}/lib" /> copy 디렉토리나 파일을 복사하는데 사용합니다. 파일 하나를 복사할 때는 다음과 같이 합니다. <copy file="myfile.txt" tofile="mycopy.txt" / > 디렉토리를 다른 디렉토리로 복사하는 스크립트는 다음과 같습니다. <copy todir="../new/dir"> <fileset dir="src_dir"> </copy> 다음은 특정 디렉토리의 원하는 파일만 지정하여 복사한다. (*.java 파일을 제외한 나머지 파일을 복사합니다.) 여기서 exclude는 특정 내용을 제외하는 키워드이고 **의 경우 src_dir 디렉토리 및에 모든 디렉토리를 재귀적으로 탐색하는 것을 의미합니다. <copy todir="../dest/dir"> <fileset dir="src_dir"> <exclude name="**/*.java" /> </fileset> </copy> 위 내용을 다음과 같이 쓸 수도 있습니다. <copy todir="../dest/dir"> <fileset dir="src_dir" exclude="**/*.java" /> </copy> javac Java소스파일을 컴파일하는데 사용합니다. 소스 디렉토리는 재귀적으로 탐색하며, class파일이 없거나 class 파일이 javㅁ 파일보다 오래된 경우에만 컴파일합니다. ${src}와 그 하위 디렉토리에 있는 모든 java 파일을 컴파일하여 그 겨로가를 ${build} 디렉토리에 저장합니다. 클래스패스에는 xyz.jar가 포함되고, 디버깅 옵션을 켜고 컴파일합니다. <javac srcdir="${src}" destdir="${build}" classpath="xyz.jar" debug="on" /> ${src}와 ${src2} 및 그 하위 디렉토리에 있는 java파일을 컴파일하여 그 결과를 ${build} 디렉토리에 저장합니다. 이를 컴파일 할 대 mypackage/p1과 mypackage/p2에 있는 파일만을 사용하고, 클래스패스에 xyz.jar가 포합됩니다. 여기서 include가 특정 내용을 포함하는 키워드 입니다. <javac srcdir="${src}:${src2}" destdir="${build} include="mypackage/p1/**, mypackage/p2/**" exclude="mypackage/p1/testpackage/**" classpath="xyz.jar' debug="on" /> 위 예제는 다음과 같이 표현할 수도 있습니다. <javac destdir="${build}" classpath="xyz.jar" debug="on"> <src path="${src}" /> <src path="${src2}" /> <include name="mypackage/p1/**" /> <include name="mypackage/p2/**" /> <include name="mypackage/p1/testpackage/** /> </javac>
${build}/classes 밑에 있는 파일을 app.jar로 묶습니다. ${build}/classes와 ${src}/resources 밑에 있는 파일을 app.jar로 묶되, Test.class는 제외합니다. <jar destfile="${dist}/lib/app.jar"> <fileset dir="${build}/classes" exclude="**/Test.class" /> <fileset dir="${src}/resources" /> </jar> javadoc javadoc 문서를 생성합니다. 다음의 예제는 src 디렉토리 밑에 있는 소스파일을 읽어 javadoc 문서를 생성하여 ${doc} 디렉토리에 저장합니다. <javadoc destdir="${doc}"> <fileset dir="${src}"> </fileset> </javadoc> delete 하나의 파일 또는 디렉토리와 그 하위 디렉토리, fileset에 지정된 파일을 삭제 합니다. /lib/ant.jar 파일을 삭제합니다. <delete file="/lib/ant.jar" /> lib 디렉토리와 그 하위 디렉토리를 삭제합니다. <delete dir="/lib" /> 현재 디렉토리와 그 하위 디렉토리에서 확장자가 bak인 모든 파일을 삭제합니다. <delete> <fileset dir="." include="**/*.bak" /> </delete> build 디렉토리와 그 하위 디렉토리를 삭제합니다. includeEmptyDirs를 "true"로 설정하면 fileset을 사용할 때 빈 디렉토리도 포함하도록 합니다. <delete includeEmptyDirs="true"> <fileset dir="build" /> </delete> 지금까지 설명한 내용을 바탕으로 에코 서버를 컴파일하여 jar파일로 묶고, javadoc을 생성하는 것까지 자동화하는 Ant 빌드파일을 작성해보았습니다. 먼저 AntTest 프로젝트에 build.xml 파일을 생성합니다. 파일 이름이 build.xml일 경우 자동으로 Ant 에디터를 사용하도록 지정되어 있습니다. Outline뷰에 빌드파일의 구조가 표시됩니다. ![]() ![]() 방법 1. ![]() 방법 2. ![]() 그럼 결과는 ~ ![]() 예제 프로젝트 다운로드 : study.zip 이 글과 관련있는 글을 자동검색한 결과입니다 [?]
|
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% 이전블로그
이글루 파인더
|