ANT 사용하기 ... (1)

이번주 agile java 스터디의 주제는 배포이고, 내가 맡은 부분이다.

책에는 단순히 jar 에 대한 부분만 살짝~ 언급이 되어있어 뭔가 많이 부족함을 느끼고 있었고, 그에 따라 ant 를 떠올리게 되었다.

영문이 싫은 사람들은 http://www.apache-korea.org/ant/ 에서 한글문서를 볼 수 있다. 다만 1.5.1 까지만 내용이 있는것으로 봐서 업데이트가 오랫동안 이루어지지 않은것 같다. 하지만 기본내용은 비슷하다는 거~

우선 ant 를 다운로드 받는다. 물론 eclipse 를 사용하면 기본적으로 탑재가 되어있지만, 때에 따라서는 eclipse 같은 IDE 툴을 사용하지 못할 수 도 있기 때문에 일단 배재시키고 이야기해 보자.

압축을 풀어보면 뭔가 잡다한 파일들이 많이 보인다. 우선 $ANT_HOME/bin 을 환경변수의 PATH 에 잡고 커맨드 창에서 ant 라고 쳐 보면 아래와 같은 메시지가 나올 것이다. 그러면 일단 설치는 성공~ (환경변수를 잡기 싫으면 ant 실행시 경로포함하여 실행하세요)

Buildfile: build.xml does not exist!
Build failed

메시지를 살펴보면 build.xml 파일이 존재하지 않는다고 한다. ant 는 기본적으로 build.xml 이라는 이름을 가진 파일에 설정을 하고 되어있다.

그럼 여기서 목표를 잡아보면 ant 를 이용하여 컴파일을 해보자.

우선, 커맨드 창에서 java 컴파일을 했던 방법을 떠 올려보자. 그동안 IDE 툴에 너무 익숙해져 있어서 다소 생소하게 느껴지지만 기억을 다듬어 보면 아래와 같은 형태로 컴파일을 한다.

javac -cp 필요한라이브러리 xxx.java 
(너무 기초부터 나온다고 뭐라하지 마세용.)

그럼 ant의 설정파일인 build.xml 의 구조를 간단히 살펴보자.

<?xml version="1.0" encoding="UTF-8"?>
<project name="agilejava" default="build" basedir=".">
</project>

가장 기본이 되는 형태이다. default 값이 build 로 설정되었다는 의미는 ant 만 실행시에 build 라는 타겟을 찾아서 실행하라는 의미이고 basedir 의 값이 '.'  build.xml  과 같은  레벨을 기준으로 상대경로를 잡는다는 의미이다.

다음으로 아래와 같은 property 들을 정의할 수 있다. 코딩으로 따지자면 선언해 놓은 상수(?) 정도라고 할 수 있겠다.
자주 사용하는 것들을 미리 등록해 놓으면 편하게 쓸 수 있다. value 대신에 location 을 사용해도 무방하다.

    <property name="project.name" value="AntTask"/>
    <property name="PROJECT" value="D:/workspace/${project.name}" />
    <property name="build.dir" value="${PROJECT}/build"/>
    <property name="dist.dir" value="${PROJECT}/dist"/>
    <property name="src.dir" value="${PROJECT}/src"/>


    필요한 라이브러리들의 클래스 패스를 잡는다.
    스프링으로 따지자면 ref 속성으로 쓰기위한 하나의 bean 을 등록한다고나 할까?

    <path id="project.classpath">
        <fileset dir="${PROJECT}/web/WEB-INF/lib" includes="**/*.jar" />
    </path>

   
    우리가 이번글에서 목표로 하는 컴파일이다. target 속성에 depends 라는 녀석이 보이고 init 이라는 값을 가지고 있다.
    build 타겟을 실행할 때  init  타겟을 먼저 수행하라는 의미이다.  init 내용은  더 밑에서 살펴보고  build 를 좀 더  봐보자.
    javac 라는 녀석이 보인다.  컴파일을  수행하라는 이야기다.
    src ==> 소스 디렉토리,   destdir ==>  컴파일 된  클래스 파일이 들어갈 디렉토리 includes 는 컴파일 할 대상(여기서는 모든경로의 모든 java 파일을 설정). 나머지 옵션은 에러추적용 이므로 패스~
    위에서 설정한 라이브러리 패스를 사용하여 컴파일을 한다.

    <target name="build" depends="init">
        <javac srcdir="${src.dir}" destdir="${build.dir}" includes="**/*.java" debug="true" failonerror="true">
            <classpath refid="project.classpath" />
        </javac>
    </target>

    init 타겟은 별 내용이 없다. 시작시와 끝날시에 메시지 보여주고 컴파일 시에 필요한 디렉토리를 생성시킨다.
    <target name="init">
        <echo message="init... start" />
        <mkdir dir="${build.dir}"/>
        <mkdir dir="${dist.dir}"/>
        <echo message="init... end" />
    </target>

이제 실행을 해 보면 아래와 같은 형태의 메시지를 볼 수 있다.
>ant build

Buildfile: build.xml

init:
     [echo] init... start
     [echo] init... end

build:
    [javac] Compiling 1 source file to D:\workspace\AntTask\build

BUILD SUCCESSFUL
Total time: 4 seconds

빌드가 이루어지면 컴파일이 된 것을 확인할 수 있다.

by 윤걸 | 2007/10/11 00:04 | 자동화 | 트랙백 | 덧글(3)

트랙백 주소 : http://gerions.egloos.com/tb/3844338
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 김우용 at 2007/12/28 16:53
감사,, 잘보고 가요~~
Commented by greenfrog at 2008/09/29 13:31
감사합니다. 덕분에 문제 하나 해결 됐네요 ~ ^^
Commented by 윤걸 at 2008/09/29 19:18
도움이 되었다니 다행이네요~ ^^;

:         :

:

비공개 덧글

<< 이전 페이지     다음 페이지 >>