ANT Manual
1. Ant 소개
Apache Ant는Java기반의build도구로얼마나개발을편리하게해주느냐가관련이있으며프로그램이나프로젝트와는특별한관계성이없다.간단하게말하자면make와같은도구와유사한기능을하면서보다우수한특징들(자바기반의특징들)을가지고있다는것이다.
여기서는기본적인Ant설치및문법을소개한다.
2. Ant 설치
2.1 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
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
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 )
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들형태로구성되어있다.)
–Xml형태의ant build파일을작성한다.
(xml형태의build파일은하나의project,그project안에하나이상의target들그리고각target내부에존재하는task들형태로구성되어있다.)
–Ant build파일이존재하는디렉터리에서다음과같은형태중에하나의방식으로실행한다.
MONOSUN$>ant
현재디렉터리에서default로설정되어있는build.xml을찾아서project의default target을수행한다.
현재디렉터리에서default로설정되어있는build.xml을찾아서project의default target을수행한다.
MONOSUN$>ant install
현재디렉터리에서default로설정되어있는build.xml파일을찾아서install이라는이름의target을수행한다.
현재디렉터리에서default로설정되어있는build.xml파일을찾아서install이라는이름의target을수행한다.
MONOSUN$>ant –f vobuild.xml
현재디렉터리에서vobuild.xml을찾아서project의default target을수행한다.
현재디렉터리에서vobuild.xml을찾아서project의default target을수행한다.
MONOSUN$>ant install –f vobuild.xml
현재디렉터리에서vobuild.xml을찾아서install이라는이름의target을수행한다.
현재디렉터리에서vobuild.xml을찾아서install이라는이름의target을수행한다.
3. Ant 사용
Ant의빌드파일은XML로되어있으며하나의빌드파일은하나의project와하나이상의target을가지고있으며target은task요소로구성되어있다.
그럼각각에대해서세부적으로살펴보자.
3.1 Project
project는말뜻그대로하나의project를의미한다고보면된다.
project는다음표와같이3가지속성을가지고있다.
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의형태는다음과같다.
<nameattribute1=”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
–Option Type
여기서는Core Type중에서도많이사용되는것만다룬다.
3.4.1 fileset
속성(attribute)
|
설명(description)
|
필수(required)
|
dir
|
<fileset>의디렉터리tree의root
|
예
|
defaultexcludes
|
Default excludes를사용할것인지여부를나타낸다.
|
아니오
|
includes
|
컴마또는공백으로구분되고반드시포함되어야할파일들의패턴리스트
|
아니오
|
includesfile
|
파일들의리스트에서포함되는파일이름
|
아니오
|
excludes
|
컴마또는공백으로구분되고반드시배제되어야할파일들의패턴리스트
|
아니오
|
excludesfile
|
파일들의리스트에서배제되는파일이름
|
아니오
|
casesensitive
|
대소문자구분여부default: true
|
아니오
|
followsymlinks
|
심벌릭링크를허용할것인지여부default: true
|
아니오
|