Ant는 Application을 개발할 때 컴파일, 검사, 배포 등을 유용하게 해 주는 Jakarta Project의 공개 소프트웨어이다. 실제로 Ant를 사용하여 개발을 진행하였을 때와 사용하지 않았을 때의 개발 생산성, 개발 속도, 효율성 등을 제고해 보면 비교할 수 없을 정도로 차이가 난다. 현재 거의 대부분의 Application(공개/상용 구분없이)들이 빌드 툴로 사실상(de facto) 표준으로 채택하고 있으므로 반드시 알아두는 것이 좋겠다. 여기서는 Ant의 기본적인 사용방법에 대해서 알아보도록 하겠다.
본 설치 매뉴얼은 Linux에 기반한 것이므로 윈도우/유닉스에 대한 내용은 Jakarta Ant 사이트를 참고하기 바란다. (사실 뒤에 내용 쓰다 보니까 설치만 리눅스 용으로 작성하고 사용가이드는 윈도우에서 검증한 것이 나왔지만 별 무리는 없으므로 그냥 진행하기 바란다.)
1. Ant 기본설치
먼저 Ant를 설치하기 위해서 http://ant.apache.org로 접속을 합니다. 접속하면 다음과 같은 화면이 나타난다.
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
위의 화면에서 왼쪽 메뉴 부분 밑부분을 보면 “Download” 카테고리 밑에 Binary Distribution 링크가 나타나는데, 해당 링크를 클릭하면 아래와 같은 화면이 나타난다. 아래 화면에서 오른쪽 메인 화면에 “Current Release of Ant” 카테고리 밑에 보면 “apache-ant-1.6.2-bin.tar.gz” 링크가 나타난다. 해당 링크를 클릭하면 최신 버전의 Ant 설치파일을 다운로드 받을 수 있다. Jakarta Project의 경우는 업데이트가 상당히 빠른 편이므로 이 문서가 작성된 후에 다른 버전이 나올 수도 있는데, 파일 명칭이 다르더라도 당황하지 말고 동일한 확장자의 파일을 받으면 상관이 없겠다.
Ant
의 설치 폴더는 특별히 지정된 것은 없으므로 임의의 폴더에 설치하면 된다. 따라서 본 매뉴얼에서는 /OSS/폴더에 다운로드 받은 파일을 복사하여 설치를 진행하도록 하겠다.
[tomcat@linux OSS]$ tar xvfz apache-ant-1.6.2-bin.tar.gz
위와 같이 진행하면 ant 폴더가 상당히 복잡하므로 폴더 명칭을 “ant”로 변경한 후 진행하도록 한다.
이제는 Ant를 아무 곳에서나 실행하기 위해서 Path정보에 ant의 bin 폴더를 지정하도록 한다. 그리고 Ant는 기본적으로 자바를 이용하여 실행하므로 Java의 위치도 지정해 주어야 한다. 다만, Ant 실행 스크립트 내부에 자바의 위치는 “JAVA_HOME”으로 지정되어 있으므로 동일한 이름으로 자바의 홈을 설정해 주면 되겠다. 만약 이름을 바꾸고 싶다면 Ant 스크립트 내부의 “JAVA_HOME”이라는 이름의 예약어를 다른 이름으로 변경한 후 설정해 주어야 한다.
다른 배치 스크립트에 입력해도 상관없지만, 편의상 “.bash_profile”에 다음과 같은 내용을 추가하도록 한다.
JAVA_HOME=/usr/java/j2sdk1.4.2_05 export JAVA_HOME ANT_HOME=/OSS/ant export ANT_HOME PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$ANT_HOME/bin |
위에서 빨간색 부분이 추가된 부분이다. 여기까지 완료했으면 이제는 Ant가 실제로 정상적으로 설치되었는지 확인할 차례다. 다음과 같이 테스트하여 결과가 동일하게 나왔으면 Ant가 정상적으로 설치 완료된 것이다.
[tomcat@linux tomcat]$ ant Buildfile: build.xml does not exist! Build failed [tomcat@linux tomcat]$ _
Ant 실행시 기본적으로 참조하는 파일은 build.xml이므로 위와 같이 에러 메시지가 발생한다. 따라서 아직 build.xml 파일을 아직 작성하지 않았으므로 위의 내용은 정상적으로 설치된 것으로 보면 된다
1. Ant Build 파일 생성하기
우선 작성해야 할 소스파일을 하나 만들어서 컴파일을 실행해 보도록 한다.
Main.java |
package oss; public class <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /> public static void main(String args[]) { System.out.println(“Welcome!!”); } } |
위의 소스는 상당히 단순한 내용이지만 Ant에 대해서 설명하기에는 부족함이 없으므로 이 파일을 이용해서 설명하도록 하겠다.(사실 이론가들이 항상 새로운 프로그램을 설명할 때 “Hello World”로 설명을 하는 관계로 이런 예제를 사용하기는 싫지만, 설명을 간결함을 위함이니 이해해 주기 바란다)
우선 /src/oss/폴더를 생성한 다음 위에서 작성한 파일을 해당 폴더에 위치시킨다. 그런 다음 아래의 파일을 생성하여 /src/ 폴더 아래에 둔다. 특별히 src 폴더 아래에 위치시켜야 하는 이유는 없지만 관리상의 목적으로 그렇게 두었다고 보면 되겠다.
build.xml |
<?xml version=”1.0”?> <project name=”mytest” default=”compile”> <target name=”compile”> <javac srcdir=”.”/> <echo>compilation is completed!</echo> </target> </project> |
이제 src 폴더에서 “ant”라고 입력하고 실행해 보도록 하자. 아래와 같은 결과가 출력된 것이다.
compile: [javac] Compiling 1 source file [echo] compilation is completed! BUILD SUCCESSFUL Total time: 1 second |
컴파일하기 전에 아무런 정의되어야 할 것은 단지 ant 명령어가 바로 실행이 가능하도록 ant의 bin폴더가 path로 지정되기만 하면 되는 것뿐 다른 것은 설정할 것이 없다.
위의 build.xml파일 내용의 element들을 우선 살펴보기로 하겠다. 우선 <project> element는 항상 Ant 파일의 최상위 elemnent가 된다. 그 소속 어트리뷰트는 name과 default가 존재한다. 그리고 그 다음으로 Ant 파일에서 가장 중요한 <target> element가 있는데 이것은 실제로 해당 프로젝트에서 실행할 수 있는 최소단위가 되는 엘리먼트이다. 여기에서는 <javac>와 <echo>를 사용하였는데, 실제로 실행하였을 때 위의 출력 형태와 같이 나타나는 부분이라고 할 수 있다.
위의 xml파일을 도식화하면 위와 같다고 말할 수 있다.
이번에는 다음과 같은 형태로 한번 바꾸어 보도록 하자. 이렇게 하는 이유는 우선 어떻게 작동하는지 눈으로 확인한 다음에 하나씩 설명을 하는 방향이 이해하기 쉽기 때문이다.
<?xml version="1.0"?> <project name="mytest" default="compile"> <target name="compile" depends="init"> <javac srcdir="." destdir="./classes"/> <echo>compilation is completed!</echo> </target> <target name="init"> <mkdir dir="classes"/> </target> </project> |
실행결과는 아래와 같다.(마찬가지로 실행은 그냥 “ant”라고만 입력하면 된다.)
Buildfile: D:\MyProject\AntTest\build.xml init: [mkdir] Created dir: D:\MyProject\AntTest\classes compile: [javac] Compiling 1 source file to D:\MyProject\AntTest\classes [echo] compilation is completed! BUILD SUCCESSFUL Total time: 3 seconds |
위의 build.xml파일에 빨간색 부분은 추가된 부분이다. 이 부분이 추가된 이유는 일반적으로 클래스가 존재하는 위치와 소스가 위치하는 곳을 달리 두는 경향이 있기 때문이 이와 같은 코드들이 추가되었다. 먼저 주의깊게 보아두어야 하는 어트리뷰트는 <target> element의 depends 어트리뷰트이다. 이것으로 인해서 “init” 타겟이 먼저 실행되게 된다. 그리고 “compile” 타겟을 실행된다. 자바 컴파일시의 “–d” 옵션은 “destdir” 어트리뷰트를 이용하면 된다. 이제 우리는 소스와 이진 파일을 분리해서 쉽게 적용할 수 있게 되었다.
이번에는 일반적으로 자바를 컴파일할 때 클래스패스가 필요하므로 build.xml파일을 다음과 같이 수정하고 실행해 본다.
<?xml version="1.0"?> <project name="mytest" default="compile"> <target name="compile" depends="init"> <javac srcdir="." destdir="./classes"> <classpath refid="classpath"/> </javac> <echo>compilation is completed!</echo> </target> <target name="init"> <mkdir dir="classes"/> </target> <path id="classpath"> <fileset dir="/usr/java/lib"> <include name="tools.jar"/> </fileset> <pathelement location="./classes"/> </path> </project> |
실행결과는 바로 전의 클래스패스를 적용하기 전과 동일할 것이다. 단지 Ant는 디렉토리가 이미 생성된 경우에는 해당 작업을 건너뛰고 다음으로 진행하므로 init부분에서는 아무런 작업도 하지 않고 건너 뛰게 될 것이다. 우리가 클래스패스를 매번 환경변수로 잡아주는 것보다 이렇게 설정하는 것이 훨씬 세련되고 작업하기도 편할 것이다. 만약 그렇지 않다면 그런 사람은 아무래도 기억력이 상당히 좋은 편일 것이다. 사실 Ant를 이용해서 작업한다는 것 중에서 이 부분이 상당히 큰 비중을 차지한다. Ant 파일만 존재하면 우리는 다만 Java의 홈과 ant 실행파일의 위치만 기억하면 나머지는 그냥 프로그램을 코딩하고 바로 앤트만 실행시키면 실행까지 일사천리로 진행한다는 뜻이다.
이번에는 위의 Ant파일에서 환경적인 요소들을 분해시켜서 좀 더 관리하기 쉬운 방향으로 변경해 보기로 하겠다.
build.xml |
<?xml version="1.0"?> <project name="mytest" default="compile"> <property file="build.properties"/> <target name="compile" depends="init"> <javac srcdir="." destdir="${main.classpath}"> <classpath refid="classpath"/> </javac> <echo>compilation is completed!</echo> </target> <target name="init"> <mkdir dir="classes"/> </target> <path id="classpath"> <fileset dir="${jar.home}"> <include name="tools.jar"/> </fileset> <pathelement location="${main.classpath}"/> </path> </project> |
build.properties |
jar.home=/usr/java/lib main.classpath=./classes |
이번에는 build.properties라는 파일을 생성하여 환경변수들을 정의하였다. Ant의 build파일에서 이용하기 위해서 위와 같이 <property> element를 이용하여 가져오게 하였다. 이 파일 내부의 내용을 사용하기 위해서는 “${변수명}”과 같은 형태로 정의하면 된다. 이렇게 정의하고 나면 환경이 바뀔 경우 해당 프로퍼티 파일 내부의 위치만 변경시켜 주면 된다. 실제로 프로젝트 팀에서 이와 같이 표준을 정해서 프로젝트를 진행하면 굉장히 쉽게 환경설정 부분을 완료할 수 있다.
Ant는 이 외에도 상당히 많은 부분의 작업을 할 수 있다. 여기서는 가장 간단한 컴파일 부분만 다루었지만, 그 깊이를 알면 알수록 정말 매력적인 툴이라고 볼 수 있다.
'IT_Programming > Dev Tools' 카테고리의 다른 글
이클립스 WTP 프로젝트 사용하기 (0) | 2008.01.23 |
---|---|
스트럿츠 다운 받기 및 설치 v1.2.9 (0) | 2008.01.19 |
소스세이프 사용 시 지켜야 할 것들 (0) | 2008.01.14 |
eclipse plug-in (0) | 2007.11.22 |
gdb 를 통한 디버깅 따라하기 (0) | 2007.11.09 |