1. Ant 소개
Apache Ant는 Java 기반의
build 도구로얼마나 개발을 편리하게해주느냐가관련이있으며프로그램이나 프로젝트와는특별한관계성이없다.
간단하게말하자면 make와같은도구와유사한기능을
하면서보다
우수한특징들(자바기반의 특징들)을
가지고
있다는것이다.
여기서는기본적인 Ant
설치및문법을 소개한다.
2. Ant
설치
2.1 Ant 구하기
Ant는
http://jakarta.apache.org/ant/
에서 다운로드하여
받을 수
있다.
2.2 Ant 설치하기
– Window 환경에서 설치
Ant
가 c:\ant\ 에
인스톨 되고
있다고 가정하고, 다음의
환경을 도스 창에서
설정하든지
내 컴퓨터>
등록정보>
고급> 환경변수에 설정을
한다.
set ANT_HOME=c:\ant
set JAVA_HOME=c:\jdk1.2.2
set PATH=%PATH%;%ANT_HOME%\bin
– Unix 환경에서 설치
Ant
가 /home1/jeus/ant에
인스톨 되고
있다고 가정하고, 다음의
내용 환경 설정파일에
설정한다. (사용하는 shell에
따라서)
Unix (bash)
export ANT_HOME= /home1/jeus/ant
export JAVA_HOME /usr/j2se
export PATH=${PATH}:${ANT_HOME}/bin
Unix (csh)
setenv ANT_HOME /home1/jeus/ant
setenv JAVA_HOME /usr/j2se
set path=( $path $ANT_HOME/bin )
2.3 Ant 실행하기
–
우선 2.2와 같이 환경 설정을
한다.
– Xml형태의 ant build파일을
작성한다.
(xml형태의 build 파일은
하나의 project, 그 project 안에
하나이상의 target들
그리고 각 target 내부에
존재하는 task들
형태로 구성되어
있다.)
– Ant build 파일이
존재하는 디렉터리에서
다음과 같은 형태
중에 하나의
방식으로 실행한다.
MONOSUN$>ant
현재
디렉터리에서 default로
설정되어 있는 build.xml을
찾아서 project의 default target을
수행한다.
MONOSUN$>ant install
현재
디렉터리에서 default로
설정되어 있는 build.xml파일을
찾아서 install이라는
이름의 target을
수행한다.
MONOSUN$>ant –f vobuild.xml
현재
디렉터리에서 vobuild.xml을
찾아서 project의 default target을
수행한다.
MONOSUN$>ant install –f vobuild.xml
현재
디렉터리에서 vobuild.xml을
찾아서 install이라는 이름의 target을
수행한다.
3. Ant
사용
Ant의
빌드 파일은 XML로
되어 있으며 하나의
빌드 파일은
하나의 project와 하나 이상의 target을
가지고 있으며 target은
task 요소로
구성되어 있다.
그럼
각각에 대해서
세부적으로 살펴보자.
3.1 Project
project는
말 뜻
그대로 하나의 project를
의미한다고 보면
된다.
project는
다음 표와
같이 3가지
속성을 가지고
있다.
|
속성(attribute)
|
설명(description)
|
필수(required)
|
|
name
|
project 이름
|
아니오
|
|
default
|
target이
설정되지 않았을
때의 기본 target, 이것은
build시에
옵션으로 target을
설정하지 않았을
경우 기본적으로
수행하는 target을 의미한다.
|
예
|
|
basedir
|
모든
패스(path)의
처리가 실행되는
기본 디렉터리
|
아니오
|
|
예제1) build.xml
|
|
<?xml version=”1.0″ encoding=”euc-kr”?>
<project name=”ejb” default=”init” basedir=”.”>
…
<target name=”init“>
…
</target>
…
<target name=”install” ….>
…
</target>
…
</project>
|
위의 예와 같이 하나의 project는
하나이상의 target을 정의하며
하나의 target은
실행하고자 하는 task들의
집합으로 형태로
구성된다. 위의
예에서는 project에서 필수
속성인 default에 init이라는
이름을 가진 target이
지정되어 있고 project
이름은 ejb
그리고 기본 디렉터리는
현재 디렉터리로
되어 있다.
3.2 Target
target은
특정 작업
단위(예를
들면 compile 처리부분, document
생성부분)라고
볼 수
있으며 task들의
집합형태로 구성되어
있다.
그리고 다른 target에 의존
관계를 설정
하여 새로운 target을
기존 target들로
조합하여 생성하거나
의존성을 설정
할 수도
있다.
예를 들면 A, B, C target이 있는데 B target은
A target이
실행된 후에 해야
되는 경우에 B target을
A target이
실행한 후에 실행하도록
의존성을 설정할
수 있다는
말이다. (단, 이것은
단지 실행하는
순서만을 지정하는
것이다.)
target은
다음과 같은
속성들을 가지고
있다.
|
속성(attribute)
|
설명(description)
|
필수(required)
|
|
name
|
target 이름
|
예
|
|
depends
|
이 target이 의존하는 target들
리스트
왼쪽에서
오른쪽으로 순서로
실행된다.
예) depends=”A,B,C”
이것은 A, B, C
순서로 수행된다.
|
아니오
|
|
if
|
이 target이 실행하기 위해서 설정되어야
하는 property의 이름이다.
|
아니오
|
|
unless
|
이 target이 실행하기 위해서 설정되지
말아야 하는 property의
이름이다.
|
아니오
|
|
description
|
이 target에 대한 간단한 설명
부분
|
아니오
|
|
예제2) build.xml
|
|
<?xml version=”1.0″ encoding=”euc-kr”?>
<project name=”ejb” default=”init” basedir=”.”>
…
<target name=”init“>
…
</target>
…
<target name=”ejb-engine-name_check”
unless=”ejb-engine-name“>
…
</target>
…
<target name=”install” depends=”init,
ejb-engine-name_check, …”>
…
</target>
…
</project>
|
위의 예제에서 보듯이 install이라는
이름을 가진 target은 init과 ejb-engine-name_check라는
이름을 가진 target에
의존성을 가지고
있다. 그리고 ejb-engine-name_check이름을
가진 target은 unless 속성을
가지고 있으므로 ejb-engine-name이라는 property가
설정되어 있지
않으면 ejb-engine-name_check라는 target의
내에 있는 task가
실행한다는 것을
의미한다. 따라서
만약에 실행 target을
install이라고
준다면 즉 다음과
같이 실행한다면
$ant
install
1.
예제2의 build.xml의
이름이 install인 target이
호출된다.
2.
install target에 depends가
설정되어 있으므로 depends에 설정되어
있는 target들을
왼쪽에서 오른쪽
순서로 수행한다.
3.
install target
내부의 task들을
수행한다.
3.3 Task
task란
실행 가능한
코드의 부분이라는
의미를 가지며
복수의 속성과
값(참고: 속성값은
property 에
대한 값도 가능)을
가질 수 있다.
전형적인 task의 형태는 다음과 같다.
|
<name attribute1=”value1”
attribute2=”value2” … />
|
name은 task의
이름 attribute1, attribute2는
속성 value1, value2는 값을 의미한다.
Task도
크게 3가지
형태가 존재한다.
–
build-in task :
기본 core task들
–
option task :
추가적인 package 설치
한 경우
사용 가능
–
사용자
정의 task: 기본
제공 class를
상속 받아서
작성한다.
여기서는
기본 core task들
중에서 가장
많이 사용되는 task와
그 task의
속성만을 다룬다. 그리고
그 외 task와 속성들은
다운 받은 ant 패키지에
첨부되어 있는 appendix_e.pdf
파일과 html manual을 참조하기
바란다.
3.3.1 property
|
속성(attribute)
|
설명(description)
|
필수(required)
|
|
name
|
Property로
설정하기 위한
이름
|
아니오
|
|
value
|
Property로
설정할 경우의
값
|
name 필드를
사용 할
때 3가지
중에서 하나를
사용한다.
|
|
location
|
주어진
파일의 절대 경로로 property를
설정한다.
|
|
refid
|
다른
곳에 정의된 객체를
참조한다.
|
|
resource
|
Property 파일의
자원 이름
|
name 필드
사용하지 않을
때 3가지
중에서 하나를
사용한다.
|
|
file
|
Property 파일의
경로와 파일명
|
|
environment
|
환경변수를
수집할 때 사용할
접두어
|
|
classpath
|
자원을
찾을 때 사용하는 classpath
|
아니오
|
|
classpathref
|
다른
곳의 <path>에
정의된 것을
참조하기 위해서
주어진 자원을
찾을 때
사용하는 classpath
|
아니오
|
|
prefix
|
파일이나
자원을 사용하여
로드된 Property들을
적용하기 위한
접두어
|
아니오
|
3.3.2 copy
|
속성(attribute)
|
설명(description)
|
필수(required)
|
|
file
|
복사하기
위한 파일명
|
<fileset>을
사용하지 않는
경우에만 예
|
|
preservelastmodified
|
원래
소스 파일들의
마지막 수정 시간과
똑 같이
복사된 파일들에게
적용해준다.
|
아니오:default는 false
|
|
tofile
|
복사할
파일
|
File 속성과
함께 tofile
또는 todir이
사용되어질 수
있다. <fileset>
요소와 함께
만약 file의
집합이 1보다
클 경우, <fileset>에 dir 속성만
지정되었거나 또한 file
속성만 지정된
경우에만 todir이
허용된다.
|
|
todir
|
복사할
디렉터리
|
|
overwrite
|
디렉터리에
더 현재의 파일이
존재하더라도 덮어쓴다.
|
아니오:default는 false
|
|
filtering
|
전체 build
파일 필터들을
사용하여 토큰
필터링을 복사하는
동안 실행할
것인지 설정한다.
|
아니오:default는 false
|
|
flatten
|
소스
파일의 디렉토리
구조를 무시하고
모든 파일을 todir
속성에 의해서
지정된 디렉터리로
복사한다.
|
아니오:default는 false
|
|
includeEmptyDirs
|
<fileset>에
포함된 빈
디렉터리도 복사한다.
|
아니오:default
true
|
|
failonerror
|
경고
메시지를 로그하지만 build를 멈추지는
않는다.
|
아니오:default
true
|
|
verbose
|
복사된
파일들을 로그를
남긴다.
|
아니오:default
false
|
3.3.3 chmod
|
속성(attribute)
|
설명(description)
|
필수(required)
|
|
file
|
퍼미션을
바꿀 파일 또는
하나의 디렉토리
|
두가지
중에서 하나를
선택 하거나 <fileset>을 사용한다.
|
|
dir
|
파일을
가지고 있는 디렉터리의
퍼미션이 변경되어진다.
|
|
perm
|
새로운
퍼미션
|
예
|
|
includes
|
컴마
또는 공백으로
구분되고 반드시
포함 되어야 할
파일들의 패턴
리스트
|
아니오
|
|
excludes
|
컴마
또는 공백으로
구분되고 반드시
배제 되어야 할
파일들의 패턴
리스트
|
아니오
|
|
defaultexcludes
|
Default로
배제되는 것을
사용할 것인지
나타낸다.
생략시에 default 배제는
적용된다.
|
아니오
|
|
parallel
|
단일 chmod
명령어를 사용을
사용하여 지정된
모든 파일들을
처리한다.
|
아니오
|
|
type
|
file과dir중에서
하나 또는 둘다
선택을 할
수 있다.
|
아니오:default는 file
|
3.3.4 input
|
속성(attribute)
|
설명(description)
|
필수(required)
|
|
message
|
build 하는
동안에 사용자에게
보여주는 메시지
|
아니오
|
|
validargs
|
컴마로
분리해서 문자열들을
열거한다. 여기서
지정되지 않은
인자는 거절한다.
|
아니오
|
|
addproperty
|
입력으로부터
생성되는 property의
이름
|
아니오
|
3.3.5 mkdir
|
속성(attribute)
|
설명(description)
|
필수(required)
|
|
dir
|
생성할
디렉터리
|
예
|
3.3.6 javac
|
속성(attribute)
|
설명(description)
|
필수(required)
|
|
srcdir
|
java 파일들의
위치
|
<src>를
사용하지 않는다면
예
|
|
destdir
|
class 파일들이
저장될 위치
|
아니오
|
|
includes
|
컴마
또는 공백으로
구분되고 반드시
포함 되어야 할
파일들의 패턴
리스트
|
아니오
|
|
includesfile
|
파일들의
리스트에 포함되는
파일 이름
|
아니오
|
|
excludes
|
컴마
또는 공백으로
구분되고 반드시
배제 되어야 할
파일들의 패턴
리스트
|
아니오
|
|
excludesfile
|
파일들의
리스트에서 배제되는
파일 이름
|
아니오
|
|
classpath
|
사용하기
위한 classpath
|
아니오
|
|
sourcepath
|
사용하기
위한 소스 경로, default는
srcdir 값이다.
|
아니오
|
|
bootclasspath
|
Bootstrap 클래스
파일들의 위치
|
아니오
|
|
classpathref
|
사용하기
위한 classpath로써
다른 곳에
정의된 경로를
참조하는 것이다.
|
아니오
|
|
sourcepathref
|
사용하기
위한 sourcepath로써
다른 곳에
정의된 경로를
참조하는 것이다.
|
아니오
|
|
bootclasspathref
|
사용하기
위한 bootclasspath로써
다른 곳에
정의된 경로를
참조하는 것이다.
|
아니오
|
|
extdirs
|
설치된
확장들의 위치
|
아니오
|
|
nowarn
|
컴파일시에 –nowarn을 사용할것인지 여부를 나타낸다. Default는
off이다.
|
아니오
|
|
debug
|
소스를 debug
정보를 가지고
컴파일 할
것인지 여부를
나타낸다. Default는 off이다.
|
아니오
|
|
debuglevel
|
디버거
정보를 나타내는
레벨
|
아니오
|
|
optimize
|
최적화로
소스를 컴파일할
것인지 여부 default:off
|
아니오
|
|
deprecation
|
Deprecation
정보를 컴파일할
때 보여줄것인지
여부 default:off
|
아니오
|
|
target
|
특정 VM에 맞는 클래스 생성
|
아니오
|
|
verbose
|
컴파일러에게 verbose
출력을 요청
여부
|
아니오
|
|
includeAntRuntime
|
Ant의
런타임 라이브러리를
포함할 것인지
여부
|
아니오
|
|
includeJavaRuntime
|
VM을 실행할 때 classpath에
설정된 Default 런타임
라이브러리들을 포함할
것인지 여부 default: yes
|
아니오
|
|
fork
|
따로 JDK
컴파일러를 javac를 실행 할 지
여부 default: no
|
아니오
|
|
executable
|
fork= yes의
경우에 사용하여
실행하는 javac 절대 경로 default: ant를
실행시키는 java의
컴파일러
|
아니오
|
|
memoryInitialSize
|
VM이 사용하는 초기 메모리 크기 (예:128m)
|
아니오
|
|
memoryMaximumSize
|
VM이 사용하는 최대 메모리 크기 (예:256m)
|
아니오
|
|
failonerror
|
만약
컴파일에러가 발생할
때 build를
멈출것인지 여부 default:true
|
아니오
|
|
listfiles
|
컴파일되는
소스 파일을 리스트할
것인지 여부 default:no
|
아니오
|
3.3.7 java
|
속성(attribute)
|
설명(description)
|
필수(required)
|
|
classname
|
실행할 Java
클래스
|
Jar또는
클래스 이름
|
|
jar
|
실행할
수 있는 jar의 위치
|
Jar또는
클래스 이름
|
|
args
|
실행되어질
클래스를 위한
인자
|
아니오
|
|
classpath
|
사용할 classpath
|
아니오
|
|
classpathref
|
사용하기
위한 classpath로써
다른 곳에
정의된 경로를
참조하는 것이다.
|
아니오
|
|
fork
|
또
다른 VM으로 클래스 실행하도록
할 것인지
여부
|
아니오
|
|
jvm
|
JVM에
호출하기 위해서
사용되는 명령어 default:java
|
아니오
|
|
jvmargs
|
Fork된 VM에
인자를 전달되는
인자 deprecated되었고 <jvmarg>로
대신 사용
|
아니오
|
|
maxmemory
|
Fork된 VM에
할당되는 최대
메모리 양
|
아니오
|
|
failonerror
|
명령어가 returncode로 0와
다른 값을
가지고 존재한다면 build 프로세스를
멈춤 Default: false
|
아니오
|
|
dir
|
VM을 호출하기 위한 디렉터리(fork가 disable되어
있으면 무시되어진다.)
|
아니오
|
|
output
|
출력으로
작성할 파일 이름
|
아니오
|
|
append
|
기존의
출력 파일에 덮어쓸지
추가로 덧붙여
쓸지 여부
|
아니오
|
|
newenvironment
|
새로운
환경 변수들이
지정되었을 때
기존의 환경 변수들을
사용하지 않는다. Default:false (fork가 disable되어
있으면 무시된다.)
|
아니오
|
|
timeout
|
만약
지정된 시간 내에
끝나지 않는다면
명령어가 멈춘다.(단위는
밀리초)
|
아니오
|
3.3.8 jar
|
속성(attribute)
|
설명(description)
|
필수(required)
|
|
destfile
|
생성할 jar
파일
|
예
|
|
basedir
|
Jar에
포함할 파일들의
디렉토리 위치
|
아니오
|
|
encoding
|
압축
파일 내에서 사용하는
파일이름을 위해서
사용할 문자
인코딩
|
아니오
|
|
filesonly
|
파일
항목들만 저장한다. Defualt:
false
|
아니오
|
|
includes
|
컴마
또는 공백으로
구분되고 반드시
포함 되어야 할
파일들의 패턴
리스트
|
아니오
|
|
includesfile
|
파일들의
리스트에 포함되는
파일 이름
|
아니오
|
|
excludes
|
컴마
또는 공백으로
구분되고 반드시
배제 되어야 할
파일들의 패턴
리스트
|
아니오
|
|
excludesfile
|
파일들의
리스트에서 배제되는
파일 이름
|
아니오
|
|
defaultexcludes
|
excludes을
기본적으로 사용할
것인지 여부
|
아니오
|
|
manifest
|
사용할 manifest
파일
|
아니오
|
|
update
|
이미
존재하는 파일이
있다면 대상파일을
업데이트 할 것인지 overwrite할
것인지 여부
|
아니오
|
|
whenempty
|
일치되는
파일이 없을 때
처리 (fail,skip,create) default:skip
|
아니오
|
|
duplicate
|
파일이
중복된 것을 발견했을
때 처리
(add,preserve,fail) default: add
|
아니오
|
|
index
|
Classloading을
빨리 하기
위해서 Index list를 작성할지
여부 default: false (JDK 1.3.X만의 특징)
|
아니오
|
3.3.9 delete
|
속성(attribute)
|
설명(description)
|
필수(required)
|
|
file
|
삭제할
파일
|
<fileset>을
사용하지 않는다면
둘 중에서
하나
|
|
Dir
|
삭제할
디렉터리
|
|
verbose
|
삭제되는
파일들의 이름을
보여준다. Default: false
|
아니오
|
|
quiet
|
지정된
파일이나 디렉터리가
존재하지 않더라도
설명하는 메시지를
출력하지 않는다. Default: false
|
아니오
|
|
failonerror
|
에러가 build를 멈추게 할지 제어하거나
화면에 보여주기만
할것인지 제어할지
여부 단지 quiet가
flase때만
관련 있다. Default: true
|
아니오
|
|
includeEmptyDirs
|
<fileset>을
사용했을 때
빈 디렉터리도
삭제하기 위해서는 true로
설정해야 한다. Default: false
|
아니오
|
|
includes
|
Deprecated되었다. <fileset>을 대신 사용한다.
|
아니오
|
|
includesfile
|
Deprecated되었다. <fileset>을 대신 사용한다.
|
아니오
|
|
excludes
|
Deprecated되었다. <fileset>을 대신 사용한다.
|
아니오
|
|
excludesfile
|
Deprecated되었다. <fileset>을 대신 사용한다.
|
아니오
|
|
defaultexcludes
|
Default excludes를
사용할지 여부
|
아니오
|
3.3.10 echo
|
속성(attribute)
|
설명(description)
|
필수(required)
|
|
message
|
Echo하기
위한 메시지
|
이
요소 내에서
문자 부부에 포함
되어
있는 데이터가
없을 경우에
예
|
|
file
|
메시지를
작성하기 위한
파일
|
아니오
|
|
append
|
존재하는
파일에 추가할지
여부
|
아니오
default: false
|
|
level
|
Dl 메시지를
보여줄 레벨을
제어 (error, warning, info, verbose,
debug)
|
아니오
default: warning
|
3.3.11 Nested Tasks
task
내에서 사용되는
내부 task들
중에서 많이
사용되는 것들만
열거 한다.
jvmarg
|
속성(attribute)
|
설명(description)
|
필수(required)
|
|
value
|
JVM인자
값
|
예
|
classpath
|
속성(attribute)
|
설명(description)
|
필수(required)
|
|
path
|
Classpath의
경로 설정
|
예
|
arg
|
속성(attribute)
|
설명(description)
|
필수(required)
|
|
line
|
실행하는
클래스의 인자들의
값
|
예
|
sysproperty
|
속성(attribute)
|
설명(description)
|
필수(required)
|
|
key
|
System의 property의
값의 키
|
예
|
|
value
|
System의 property 값을
지정
|
Key가
있다면 예
|
metainf
|
속성(attribute)
|
설명(description)
|
필수(required)
|
|
dir
|
Meta-INF에
포함할 파일이
존재하는 디렉토리
|
예
|
|
includes
|
컴마
또는 공백으로
구분되고 반드시
포함 되어야 할
파일들의 패턴
리스트
|
아니오
|
include
|
속성(attribute)
|
설명(description)
|
필수(required)
|
|
name
|
포함할
파일 이름 또는
파일이름의 패턴
|
예
|
exclude
|
속성(attribute)
|
설명(description)
|
필수(required)
|
|
name
|
배제할
파일 이름 또는
파일이름의 패턴
|
예
|
3.4 Type
Type은
크게 2가지로
나누어진다.
– Core Type
–
Option Type
여기서는 Core Type중에서도 많이 사용되는 것만
다룬다.
3.4.1 fileset
|
속성(attribute)
|
설명(description)
|
필수(required)
|
|
dir
|
<fileset>의
디렉터리 tree의 root
|
예
|
|
defaultexcludes
|
Default excludes를
사용할 것인지
여부를 나타낸다.
|
아니오
|
|
includes
|
컴마
또는 공백으로
구분되고 반드시
포함 되어야 할
파일들의 패턴
리스트
|
아니오
|
|
includesfile
|
파일들의
리스트에서 포함되는
파일 이름
includeEmptyDirs와 충돌
|
아니오
|
|
excludes
|
컴마
또는 공백으로
구분되고 반드시
배제 되어야 할
파일들의 패턴
리스트
|
아니오
|
|
excludesfile
|
파일들의
리스트에서 배제되는
파일 이름
|
아니오
|
|
casesensitive
|
대소문자
구분 여부 default: true
|
아니오
|
|
followsymlinks
|
심벌릭
링크를 허용할
것인지 여부 default: true
|
아니오
|