고수로 가는 지름길! Jakarta Project
이클립스 기반 프로젝트 필수 유틸리티: CVS, Ant, JUnit
두 책의 ant 부분을 보고 정리하였습니다.
# build.xml 파일의 기본구조
<?xml version="1.0" encoding="euc-kr"?>
<project name="projectName" default="defaultTargetName" basedir=".">
<property name="" location=""/>
<target name="">...</target>
<target name="" depends="">...</target>
<target name="" depends="">...</target>
<target name="" depends="" if="">...</target>
<target name="" depends="" unless="">...</target>
# project 태그
1) name : 프로젝트의 이름
2) default : Ant를 실행할때 target을 지정하지 않은 경우 기본적으로 사용할 target (필수)
3) basedir : 경로 계산할때의 기준 디렉토리. 지정하지 않은 경우 현재 디렉토리가 basedir로 사용된다. basedir 프로퍼티의 값으로도 사용된다.
# target 태그
1) name : 타켓의 이름 (필수)
2) depends : 이 타겟이 의존하고 있는 타겟의 목록. 각 타켓의 이름은 ,(콤마) 로 구분한다.
3) if : 지정한 프로퍼티가 설정되어 있는 경우 이 타겟을 수행한다.
4) unless : 지정한 프로퍼티가 설정되어 있지 않은 경우 이 타겟을 수행한다.
5) description : 타겟이 수행하는 기능에 대한 설명
# ant 경로 규칙
1) * : 0개 또는 그이상의 글자가 매칭
2) ? : 한글자와 매칭
3) ** : 다계층을 나타냄 예) dir/**/A => dir/dir1/A, dir/dir2/A, dir/dir1/dirA/A 다 포함.
4) / 또는 \ 으로 끝날 경우 : /** 또는 \** 과 동일
# includes 속성 : 포함시킬 파일의 목록 (include 태그, includesfile 속성으로 사용 가능)
# excludes 속성 : 제외시킬 파일의 목록 (exclude 태그, excludesfile 속성으로 사용 가능)
# excludes 속성 명시 여부에 상관없이 제외 되는 것들 : 제외 시키고 싶지 않을 경우 defaulteexcludes = "no" 설정
- **/*~, **/#*#, **/.#*, **/%*%, **/._*
- **/CVS, **/CVS/**, **/.cvsignore
- **/SCCS, **/SCCS/**
- **/vssver.scc
- **/.svn, **/.svn/**
- **/.DS_Store
# fileset 태그 : 파일 집합
1) dir : 파일 집합을 표시할 때의 루트 디렉토리 (dir 또는 file 중 한개 반드시 명시)
2) file : 한 개의 파일을 명시할 때 사용하는 속성 (dir 또는 file 중 한개 반드시 명시)
3) casesensitive : 대소분자 구분 여부 (true/false) 기본값 true
4) followsymlinks : 심볼릭 링크를 따라갈지의 여부 (true/false) 기본값 true)
사용 예)
<fileset dir="${basedir}/src" defaultexcludes="no">
<include name="**/*.java"/>
<include name="**/*.properties"/>
<exclude name="**/*.bak"/>
</fileset>
# dir 태그 : 디렉토리 집합
1) dir : 디렉토리 집합을 표시할 때의 루트 디렉토리 (필수)
2) casesensitive : 대소분자 구분 여부 (true/false) 기본값 true
3) followsymlinks : 심볼릭 링크를 따라갈지의 여부 (true/false) 기본값 true)
사용 예)
<dirset dir="" includes="" excludes=""/>
# patternset 태그 : 재사용 가능한 파일 집합
사용 예)
<patternset id="commonJar">
<include name="servlet.jar"/>
<include name="mail.jar"/>
<include name="activation.jar"/>
</patternset>
<fileset dir="j2eelib">
<patternset refid="commonJar"/>
</fileset>
# path 태그 : 재사용 가능한 경로 목록의 집합
사용 예)
<path id="project.class.path">
<pathelement location="fileupload/WEB-INF/classes"/>
<pathelement path="lib/servlet.jar;lib/commons-fileupload-1.0.jar"/>
</path>
<classpath refid="project.class.path"/>
- location : 하나의 파일 또는 디렉토리 지정
- path : 여러 경로를 지정 (; 또는 : 으로 구분)
# 아래의 build.xml 파일에서 ant makeZip 을 할경우 complie 은 두번이 아닌 한번만 실행되게 된다.
<project name="build" default="makeZip" basedir=".">
<target name="compile"/>
<target name="srcCopy" depends="compile"/>
<target name="classCopy" depends="compile"/>
<target name="makeZip" depends="srcCopy, classCopy"/>
</project>
# property 태그 : property 지정
1) name : 프로퍼티의 이름
2) value : 프로퍼티의 값을 지정 (name 속성 지정시 value 또는 location 둘중 하나 반드시 사용)
3) location : 지정한 경로명의 절대 경로명을 값으로 지정 (name 속성 지정시 value 또는 location 둘중 하나 반드시 사용)
4) resource : 프로퍼티 파일을 읽어 올 때 사용할 자원명을 지정 (name 속성 사용않는 경우 resource, file, environment 중 하나 반드시 사용)
5) file : 지정한 파일로부터 프로퍼티 목록을 읽어 온다 (name 속성 사용않는 경우 resource, file, environment 중 하나 반드시 사용)
6) environment : 환경 변수를 읽어 올때 사용할 접두어를 지정 (name 속성 사용않는 경우 resource, file, environment 중 하나 반드시 사용)
7) classpath : 자원으로부터 프로퍼티 파일을 읽어 올 때 사용할 클래스 패스
8) classpathref : 클래스패스로 사용할 경로를 path 태그 로 부터 가져온다.
9) prefix : resource 또는 file 속성을 사용하여 읽어 온 프로퍼티를 참조할 때 사용할 접두어를 지정한다. 만약 접두어 맨뒤에 "." 가 포함되어 있지 않을 경우, 자동으로 "."이 접두어 뒤에 붙는다.
사용 예)
<property file="${basedir}/buildprop/global.properties"/>
<property environment="env"/>
<echo message="JAVA_HOME ${env.JAVA_HOME}"/>
# 기본 프로퍼티 : property 태그 사용하지 않아도 사용 가능한 프로퍼티
- 모든 자바의 시스템 프로퍼티
- basedir : 프로젝트의 기본 디렉토리의 절대 경로. project 태그의 basedir 속성에 명시된 값
- ant.file : 빌드 파일의 절대 경로
- ant.version : Ant 버전
- ant.project.name : 현재 실행주인 프로젝트의 이름. project 태그의 name 속성에 명시된 값
- ant.java.version : Ant 가 발견한 자바 버전.
# javac
1) srcdir : 소스가 위치한 디렉토리 (src 태그로 지정가능. 둘 중 하나 필수)
2) descdir : 생성된 클래스가 위치할 디렉토리를 지정. javac -d 옵션과 동일
3) classpath : 컴파일할 때 사용할 클래스패스 (class 태그로 지정 가능)
4) classapathref : path 태그로 지정한 경로를 클래스패스로 참조
5) encoding : 소스파일의 인코딩을 지정. javac -encoding 옵션과 동일
6) nowarn : 컴파일시 -nowarn 옵션 추가 (on) 기본값은 off
7) deprection : 컴파일시 -deprecation 옵션 추가 (on) 기본값은 off
사용 예)
<javac srcdir="" descdir="">
<classpath>
<fileset>
<patternset refid=""/>
</fileset>
</classpath>
</javac>
# jar
1) destfile : 생성할 jar 파일 지정
2) basedir : jar 파일로 압축할 기본 디렉토리 지정
사용 예)
<jar destfile="${disc}/lib/app.jar" basedir="${build}/classes"/>
<jar destfile="${disc}/lib/app.jar">
<fileset dir="${build}/classes" exclude="**/test*.class"/>
<fileset dir="${src}/resources"/>
</jar>
# zip
- 기본적으로 jar 사용법와 같이 사용 가능.
- zipfileset 태그를 사용하여 압축되는 파일의 경로명을 변경할 수 있음.
- zipfileset 의 속성
1) prefix : ZIP 파일에 압축될 때 변경되어 들어갈 경로명
2) fullpath : 특정 파일의 변경될 경로를 지정
3) filemode : 유닉스 기반의 시스템에서 압축되는 파일의 모드를 지정. 기본값은 644
4) dirmode : 유닉스 기반의 시스템에서 압축되는 디렉토리의 모드를 지정. 기본값은 775
사용 예)
<zip destfile="${dist}/example.zip">
<zipfileset dir="build/api" prefix="docs/api"/>
<zipfileset dir="${basedir}" includes="chang.log.20031227" fullpath="docs/chagelog.txt"/>
<zipfileset dir="build/classes" prefix="classes"/>
<zipfileset dir="build/src" prefix="src"/>
</zip>
# war
사용 예)
<war destfile="main.war" webxml="src/metadata/web.xml">
<fileset dir="src/mainapp/html"/>
<fileset dir="src/mainapp/jsp"/>
<lib dir="lib">
<exclude name="logging2.jar"/>
</lib>
<classes dir="build/main/classes"/>
<zipfileset dir="src/imagefile/images" prefix="images"/>
</war>
# tar
- 기본 사용 법 : <tar destfile="" basedir=""/>
- tarfileset 태그
- targileset 의 속성
1) mode : 3자리 8진수값. 775 등의 값을 갖는다.
2) username : 파일에 대한 사용자 이름을 지정한다. UID와는 다르다.
3) group : 파일에 대한 그룹 이름을 지정한다. GID와는 다르다.
4) prifix : tar 파일에 압축될 때 변경되어 들어갈 경로명
5) fullpath : 특정 파일의 변경될 경로를 지정
6) preserveLeadingSlashes : 맨 앞의 '/'를 유지할지의 여부를 지정. 기본값 : false
사용 예)
<tar destfile="${dist}/example.tar">
<tarfileset dir="build/api" prefix="docs/api"/>
<tarfileset dir="${basedir}" includes="chage.log.20031227" fullpath="docs/chagelog.txt"/>
<tarfileset dir="build/classes" prefix="classes"/>
<tarfileset dir="build/src" prefix="src"/>
</tar>
<gzip zipfile="${dist}/example.tar.gz" src="${dist}/example.tar"/>
<tar destfile="${dist}/example.tar.gz" basedir="${build}" compression="gzip"/>
# javadoc
1) sourcepath : 소스 파일의 경로 지정. 하위 디렉토리까지 모두 처리 (sourcepath, sourcepathref, sourcefiles 중 하나는 필수)
2) sourcepathref : path 에서 지정한 경로를 소스 파일의 경로로 사용 (sourcepath, sourcepathref, sourcefiles 중 하나는 필수)
3) sourcefiles : 소스 파일의 목록을 지정. 각 파일은 콤마(,)로 구분 (sourcepath, sourcepathref, sourcefiles 중 하나는 필수)
4) destdir : 결과 파일이 생성될 디렉토리
5) packagenames : 콤마로 구분된 패키지 파일의 목록. 패키지명이 *로 끝날 경우 그 하위 패키지까지 모두 처리한다.
6) excludepackagenames : 문서를 생성하지 않을 패키지의 목록을 지정. 각 패키지는 콤마(,)로 구분. 패키지명이 *으로 끝날 경우 그 하위 패키지까지 모두 제외
7) access : 접근 모드를 지정. public, protected, package, private 중 한 가지 값. 기본값 : protected
8) public : 생성되는 API 문서에 public 클래스와 멤버만 보여준다.
9) protected : 생성되는 API 문서에 protected/public 클래스와 멤버만 보여준다.
10) package : 생성되는 API 문서에 package/protected/public 클래스와 멤버만 보여준다.
11) private : 생성되는 API 문서에 private/package/protected/public 클래스와 멤버만 보여준다.
12) encoding : 소스 파일의 인코딩을 명시.
13) locale : ko_KR과 같이 사용할 로케일을 지정.
14) charset : 생성된 문서를 보여줄 때 사용할 케릭터셋을 지정.
15) version : @version 주석을 포함.
16) author : @author 주석을 포함.
17) nodeprecated : deprecated 정보를 포함하지 않는다.
18) nodeprecatedlist : deprecated 목록을 생성하지 않는다.
19) windowtitle : 문서를 위한 제목을 텍스트로 입력.
20) overview : HTML 문서로부터 개략 문서를 읽어 온다.
21) helpfile : 도움말로 사용할 HTML 파일을 지정.
22) stylesheetfile : 스타일 시트로 사용할 파일을 지정.
23) header : 생성될 HTML 파일의 헤더로 사용될 HTML 코드를 명시
24) footer : 생성될 HTML 파일의 풋터로 사용될 HTML 코드를 명시
사용 예)
<javadoc destdir="{build}/api"
sourcepath="src"
packagenames="javacan.main.*"
excludepackagenames="javacna.main.test.*"
windowtitle="Main 웹 어플리케이션"
encoding="euc-kr" />
<javadoc destdir="{build}/api"
windowtitle="Main 웹 어플리케이션"
encoding="euc-kr">
<packageset dir="src" defaultexcludes="yes">
<include name="javacan/main/**"/>
<exclude name="javacan/main/test/**"/>
</packageset>
</javadoc>
# copy
1) file : 복사할 파일을 지정 (fileset으로 복사할 파일 목록을 지정하지 않는 경우 필수)
2) tofile : 복사될 파일을 지정
3) todir : 원본을 복사할 디렉토리를 지정
4) overwrite : 기존 파일 덮어쓰기 여부 (true/false) 기본값 : false
5) preservelastmodified : 원본의 최종 수정 날짜 유지 여부(true/false) 기본값 : false
6) includeEmptyDirs : 텅빈 디렉토리도 복사할지의 여부(true/false) 기본값 : true
사용 예)
<copy file="${workspace}/readme.txt.200312" tofile="${build}/readme.txt"/>
<copy file="${workspace}/readme.txt.200312" todir="${build}"/>
<copy todir="${build}/src">
<fileset dir="${workspace}/src"/>
</copy>
# mkdir
사용 예)
<mkdir dir="${build}/webapp/WEB-INF/classes"/>
webapp/WEB-INF 또한 존재 하지 않는 경우 생성
# delete
사용 예)
<delete>
<fileset dir="${build}"/>
</delete>
위의 경우 ${build} 와 그 하위 디렉토리의 모든 파일을 삭제. 그러나 디렉토리는 남아있음.(fileset 은 파일의 집합)
아래와 같이 해주면 디렉토리도 전부 삭제
<delete includeEmptyDirs="true">
<fileset dir="${build}"/>
</delete>
# ant : 또 다른 빌드 파일의 실행. 여러개의 서브 프로젝트로 구성되어 있을 경우 유용
1) antfile : 사용할 빌드 파일을 지정. 명시하지 않을 경우 build.xml. dir 속성에 주어진 디렉토리에 대해 상대경로
2) idr : 새로운 Ant 프로젝트의 basedir을 지정.
3) target : 수행할 타켓을 지정
4) output : 새로운 Ant 프로젝트의 수행 결과를 저장할 파일을 명시
5) inheritAll : 새로운 Ant 프로젝트에 현재 Ant 프로젝트의 모든 프로퍼티 전달 여부(true/false). 기본값 : true
6) inheritRefs : 새로운 Ant 프로젝트에 현재 Ant 프로젝트의 모든 참조 전달 여부(true/false). 기본값 : true
사용예)
<target name="makeSubProject">
<ant dir="subproject/logging" target="prepare">
<property name="module1.4" value="jdk1.4"/>
</ant>
<ant dir="subproject/common" target="prepare"/>
</target>
# java
1) classname : 실행할 클래스 이름 (classname, jar 둘중 하나 필수)
2) jar : 실행할 jar 파일의 위치 (classname, jar 둘중 하나 필수)
3) classpath : 사용할 클래스패스를 지정
4) classpathref : 미리 지정한 path 태그를 참조
5) fork : 세러은 가상머신에서 클래스 수행 여부 (true/false). 기본값 : false
6) maxmemory : 포크된 가상 머신에 할당할 메모리의 최대 크기를 지정 (fork가 false인 경우 무시)
7) dir : 가상 머신을 호출할 디렉토리 (fork가 false인 경우 무시)
사용 예)
<java classname="javacan.main.prepare.TableInitilizer">
<classpath>
<pathelement path="${java.class.path}"/>
</classpath>
<sysproperty key="module" value="test"/>
</java>
# native2ascii : 유니코드로의 변환
1) src : 변환할 파일들이 위치한 기준 디렉토리
2) dest : 변환한 결과를 저장할 디렉토리
3) encoding : 변환할 파일의 인코딩 (기본으로 JVM의 기본 인코딩 사용)
4) reverse : 이스케이프된 유니코드를 지정한 인코딩을 사용하는 문자열로 변환.
사용 예)
<native2ascii src="${config}"
includes="**/*.properties"
excludes="**/test/*.properties"
encoding="EUC-KR"/>
사용 예제 )
출처 : http://trypsr.tistory.com/
댓글