"Ant는 Tomcat처럼 Jakarta 프로젝트의 일환으로 만들어진 산출물로 C에서 말하는 make파일과 같은 Java 프로그램용
build이다. 기존의 make, gnumake와 같은 build tool도 존재하지만 ANT는 OS와 상관없이 사용하게 되어 있다.
또한 ANT는 Configuration파일이 XML로 되어 있어 애플리케이션 구조에 맞게 적용하기에 편리하게 되어 있다.
Ant는 실제로 어떤 프로그램을 개발하느냐에 상관없이 사용되는 빌드 도구로 얼마나 개발을 편리하게 해주느냐가
관건이지 프로그램이나 프로젝트와는 특별한 관계가 없다."

1. 다운로드 (http://ant.apache.org)

http://ftp.apache-kr.org/ant/binaries/ 에서 zip 파일 또는 tar.gz 파일 받는다. 최신 버젼(글쓰는 시점)은 1.6.2 이다.

참고로 ANT의 주요 기능은 다음과 같다.

  • 자바 소스 파일 컴파일
  • jar, war, ear, zip 파일의 생성
  • avadoc을 실행하여 도움말 생성
  • 파일이나 폴더의 이동 및 복사, 삭제
  • 각각의 작업에 대한 의존성 설정
  • 유닉스에서처럼 파일이나 폴더에 퍼미션 설정
  • 파일의 변경 날짜를 설정하는 touch 기능
  • 외부 프로그램의 실행
  • 플랫폼에 무관한 XML을 이용 (build.xml : Configuration파일)

2. 설치 및 설정

설치라고 해서 특별한 것은 없고, 단지 압축을 풀고 패스를 잡아주고 사용하면 된다. Ant는 자바 based이기 때문에
JDK가 설치 되어 있어야 한다. (jdk1.4.x 이상 권장). 리눅스의 경우에도 마찬가지이다.

우선 다운로드 한 zip파일을 압축을 풀어서 원하는 디렉토리에 놓고 사용하기만 하면 된다. 그러기 전에 몇가지
환경 설정 부분이 필요하다.

설치한 폴더가 C:\ant162\ 일 경우 아래 그럼에서 처럼 디렉토리와 파일들이 생성된다.

/bin : Ant 실행을 위한 배치 파일이 있다(유닉스나 리눅스의 경우 셸 파일 사용)
/lib : jar 파일들
/docs : 매뉴얼과 API 문서가 있다.
/etc : ant 환경 설정과 관련된 xsl 파일들이 있다.


c:\ant162\template 폴더(디렉토리)는 본인이 필요에 의해서 만들어 놓은 디렉토리 이다. 이곳에 필요한
빌드 관련 파일들 및 프로젝트 템플릿 파일들을 넣어두고 필요할때 꺼내어서 템플릿으로 활용한다.

압축을 풀고 디렉토리를 구성을 확인 했으면 환경설정이 필요하다. jdk는 필히 설치 해야 한다.

  • 환경변수 ANT_HOME = C:\ant162
  • 패스 ㅇㅇPATH = %ANT_HOME%\bin


[ 환경변수 설정의 예]

이제 설정을 했으면, 무사히(?) 설치 되었는지 확인해보자.

명령프롬프트 상에서 c:\> ant -h (또는 -help) 해서 다음과 같이 나오면 일단 환경 설정은 된것이다.

>ant -buildfile build.xml 을 실행하면 build.xml 파일을 참조하여 컴파일(빌드)를 실행한다.
-buildfile 옵션을 주지 않을경우 기본으로 build.xml파일을 참조하여 ant가 빌드를 행한다.

[참고]
Ant를 사용해서 Build를 하기 위해서는 JAXP-compliant XML parser가 클래스패스에 존재 해야 하는데 이는
ant lib에 포함되어 있다. 또한 톰캣 관련 빌드를 위해서 {톰캣설치디렉토리}\server\lib\catalina-ant.jar을
{ant설치디렉토리}\lib\ 카피한다. 당연한 이야기 이지만 jdk에 관련된 기본 패스와 클래스패스는 설정되어
있어야 한다.

3. 기본 사용 방법

ant [options] [target2 [target3] ...]]

ant -buildfile build.xml

java -Dant.home=%ANT_HOME%\ant org.apache.tools.ant.Main [options] [target]

프로젝트에서 사용할때는 대체적으로 프로젝트 폴더의 루트 디렉토리에 build.xml 파일을 만들고 단순히
build.xml 파일이 있는 디렉토리에서 ant 라고만 실행함으로서 빌드한다. build.xml 파일인식은 디폴트 이다.

[ build.xml 파일 작성법]

build.xml에서 사용되는 태그는

  • project
  • target
  • property

등이 있다.

project는 다수의 property를 가질 수 있으며 property는 name과 value로 이루어져 있다. property에서 지정된
value는 "${" 와 "}" 의 사이에 name값을 지정해서 마치 변수 처럼 쓸 수 있으며 그 안의 값은 value값이 된다.

target은 property 밑에 포함되는 태그로 name과 depends, if, unless, description 등이 올 수 있다.

( 예 제 )

<target name="A"/>
<target name="B" depends="A"/>
<target name="C" depends="B"/>
<target name="D" depends="C,B,A"/>

라고 되어 있다면 target D가 실해되기 위해서는 먼저 target C가 실행되고 순차적으로 target B, target, A가 실행
되면 맞는 것처럼 보이나 그렇지 않다. target C는 target B가 먼저 실행 되어야 하고 target B는 target A가 실행
되어야 하므로 target D가 실행되기 위해서는 target A, target B, target C가 순차적으로 실행되어야 한다.

<project name="My Project" default="compile" basedir=".">
....
</project>

프로젝트는 Ant가 실행될 때 요청된 target set을 의미한다. "default"라는 속성은 Ant가 실행될 때 아무런 옵션이
없으면 여기에 지정된 방식으로 수행되라는 뜻이며 "basedir"속성은 Ant가 수행될 때 현재의 working 디렉토리
를 의미한다.

<property file="build.properties"/>

build.properties 파일을 참조하여 빌드 한다.

[ build.properties파일 예제]
#이 파일이 build.xml 파일보다 설정이 우선 적용된다.
#톰캣이 설치된 홈디렉토리
catalina.home=c:/Tomcat4.1
#톰캣이설치된 conf디렉토리의 tomcat-users.xml에 있는 아이디 패스워드를 사용한다.
manager.url=http://localhost:8080/manager
manager.username=userid
manager.password=password

<property file="${user.home}/build.properties"/>

property의 값은 앞에서 지정한 property의 이름을 이용할 수 있다.

<property name="app.name" value="myapp"/>
<property name="app.version" value="1.0"/>
<property name="catalina.home" value="../../../.."/>
<property name="deploy.home" value="${catalina.home}/webapps/${app.name}"/>
<property name="dist.home" value="dist"/>

또한 아래의 예 에서 처럼 컴파일러의 컨트롤 옵션을 설정할 수 있다.

<property name="compile.debug" value="true"/>
<property name="compile.deprecation" value="false"/>
<property name="compile.optimize" value="true"/>

<property name="foo.jar" value="/path/to/foo.jar"/>
자바 컴파일러에게 classpath를 알린다.
"deploy" target을 수행하는 동안 "/WEB-INF/lib"디렉토리로 복사된다.

<target name="all" depends="clean, compile" description="Clean build and dist, then compile"/>
"all" target은 "clean" target을 수행한 후에 "compile" target을 수행하게 된다.

<target name="clean" description="delete old build and dist directories">
<delete dir="${build.home}"/>
<delete dir="${dist.home}"/>
</target>

"clean" target은 애플리케이션에서 변경되어 필요없는 클래스나 파일을 삭제하기 위해서 이전에 만든 "dist"파일을
삭제한다.

등등......사용법이 다양하고 옵션들도 많게 느껴진다. 이런식으로 설명하는 것보다 build.xml 파일을 하나의 온전한
예를 보면 쉽게 이해 될것이므로 옵션에 대한 더이상의 설명은 여기서 멈추기로 하고 다음 챕터에 build.xml 파일을
가지고 빌드해보자.

4. 기본 예제

Hello Ant 라는 이름의 예제를 작성해보고 build.xml 파일에 대한 구조도 이해하면서 전반적인 프로젝트 진행을 살펴
보도록 하자. 아주 간단한 예를 가지고 설명할 것이므로 복잡하고 다양한 예들은 커뮤니티등을 참고하길 바란다.

[ 준비 하기 ]

먼저 적절한 폴더 설정과 소스 파일이 당연히 필요하다. 그림과 같이 C:\\ant_test 폴더를 만들고 하위 폴더로
classes, doc, jar, src 폴더를 생성한다. 그리고 src 폴더 밑에는 HelloAnt.java 파일을 하나 생성한다.

HelloAnt.java 파일을 만든다 HelloAnt.java의 내용은 어떤 것이라도 상관없다.

[ Build.xml ]

Ant를 실행하면 초기값으로 현재 폴더에 있는 build.xml 파일을 찾아서 빌드하게 된다. 여기에서는
build.xml 파일의 위치를 "C:\ant_test" 밑에 두었다.

build.xml 생성 이제부터는 build.xml 파일을 살펴볼 것이다
.
만약 아래의 XML 파일을 사용할 때는 반드시 주석문을 제거하고 사용해야 한다. 그렇지 않으면 Ant를 실행할 때 에러가 발생한다. 아니면 인코딩 옵션으로 EUC-KR를 사용하자.

<?xml version="1.0"?>

<!--
name : 프로젝트 이름
default : 초기치로 설정되는 작업, 아무 것도 지정하지 않고 실행하면 이 작업을 수행
basedir : 프로젝트에 대한 기준 폴더를 지정
property : 프로젝트에서 사용할 각 폴더들의 위치를 지정
${basedir} : 이미 앞에서 설정된 값을 읽어온다
-->

<project name="HelloAnt" default="javadoc" basedir="." >
<property name="src.dir" value="${basedir}/src" />
<property name="classes.dir" value="${basedir}/classes" />
<property name="jar.dir" value="${basedir}/jar" />
<property name="javadoc.dir" value="${basedir}/doc" />

<!--
target : 각각의 타겟을 지정, 타겟이란 프로젝트를 이루는 하나 하나의 작업 단위
srcdir : 컴파일 하기 위한 자바 소스 파일의 위치를 지정
destdir : 어느 폴더에 클래스 파일들을 위치 시킬지 지정
-->

<target name="compile" >
<javac srcdir="${src.dir}" destdir="${classes.dir}" />
</target>

<!--
jar : 파일을 만든다
depends : compile 정상적으로 수행되어야만 진행
jarfile : jar 파일의 위치와 파일 이름 지정
basedir : jar로 묶을 클래스 파일의 위치
includes : 모든 폴더에서 클래스 파일들만 포함
-->

<target name="jar" depends="compile">
<jar jarfile="${jar.dir}/hello.jar"
basedir="${classes.dir}"includes="**/*.class"/>
</target>

<!--
javadoc을 실행
depends : compile과 jar 수행이 정상적으로 끝나야만 실행
sourcepath : 소스 폴더 지정
sourcefiles : 소스 파일 지정
windowtitle : 제목 지정
destdir : 파일 생성후 저장할 폴더 지정
-->

<target name="javadoc" depends="compile, jar" >
<javadoc
sourcepath="${src.dir}"
sourcefiles="${src.dir}/HelloAnt.java"
windowtitle="HelloAnt API"
destdir="${javadoc.dir}"
/>
</target>

<!--
소스 코드를 제외한 모든 작업 파일들과 폴더를 삭제한다
-->

<target name="clean" >
<delete dir="${classes.dir}/classes/*"/>
<delete dir="${jar.dir}/jar/*"/>
<delete dir="${javadoc.dir}/doc/*"/>
</target>
</project>


이런 파일을 한번만 만들어 두면 다른 프로젝트를 할 때도 조금씩 수정해서 계속 써먹을 수 있다.
재사용(reuse)이란 그래서 좋은 것이다.

[ ANT 실행 ]

앞에서 만든 빌드 파일을 실행한 결과는 다음과 같다.
실행은 build.xml 파일이 있는 폴더에서 도스 창을 열고 'ant'라고만 입력하면 된다.

C:\ant_test>ant

Buildfile: build.xmlcompile:

jar:

javadoc:

[javadoc] Generating Javadoc
[javadoc] Javadoc execution
[javadoc] Loading source file C:\ant_test\src\HelloAnt.java...
[javadoc] Constructing Javadoc information...
[javadoc] Building tree for all the packages and classes...
[javadoc] Building index for all the packages and classes...
[javadoc] Building index for all classes...

BUILD SUCCESSFUL

Total time: 3 seconds

C:\ant_test>

폴더를 살펴보면 각 폴더에 클래스 파일들, jar 파일, HTML 문서가 생성된 것을 확인할 수 있다.

5. 맺는말

이제 까지 기본 사용법을 배워 보았다. 매우 간단한 강좌(팁) 이므로 많이 부족함을 느낀다. 여기에 추가 하고자 한다면
웹 개발용으로 예제를 하나 추가 해보고 싶다는 생각을 한다. 그러나, 이클립스나 넷빈즈 등의 툴에서 war 파일 과
빌드 되는 과정을 아시는 분은 ant의 이용을 이해 할 것으로 본다. 또한, 본 홈페이지의 ANT 페이지 에 보면 다른 강좌
를 링크하거나 올려 놓았다. 함께 올려놓은 build.xml 예제파일을 한번쯤 보면 쉽게 이해 할 부분이라고 생각한다.
그리고 또한 커뮤니티, ant.apaghe.org 에 가면 좋은 강좌도 많다. 특히 웹에 관련 하여서는 http://www.okjsp.pe.kr의 도움이 매우 크다.

끝으로, 이 문서는 대부분 창작이 아니고, 여러곳의 도움을 받은 문서를 제가 편의상 엮어 본것이다




Posted by BAGE