IT/java

Ant

원창연 2023. 10. 2. 09:17

참고  : https://blog.naver.com/centrople/80119012228

Ant로 빌드하는 과정에서 많은 프로퍼티를 사용하는 경우 별도의 프로퍼티 파일을 작성한 후 file이나 resource 속성을 사용하여 프로퍼티를 초기화하면 편리하다.

 Ant에서 기본적으로 제공하는 프로퍼티
모든 자바의 시스템 프로퍼티를 Ant의 프로퍼티로 사용할 수 있다.
Basedir – 프로젝트의 기본 디렉토리의 절대 경로. <project> 태그의 basedir 속성에 명시된 값
Ant.file – 빌드 파일의 절대 경로
Ant.version -  Ant 버전
Ant.project.name – 현재 실행중인 프로젝트의 이름 . proejct name 속성으로 지정
Ant.java.version – Ant가 발견한 자바 버전. 현재 “1.1”, “1.2”,”1.3”,”1.4”를 값으로 가질수 있다.

 

셈플

<project name="STRUTS_PROJECT" default="deploy" basedir=".">
  <description>
        simple example build file
    </description>
 
  <target name="init" description="prepare enviroment">
           <property name="catalina.dir" value="C:/Program Files/Apache Group/Tomcat 4.1" />
           <property name="catalina.common.lib.dir" value="${catalina.dir}/common/lib" />
           <property name="webapp.dir" value="webapp" />
           <property name="webapp.WEB-INF.dir" value="${webapp.dir}/WEB-INF" />
           <property name="webapp.WEB-INF.lib.dir" value="${webapp.WEB-INF.dir}/lib" />
           <property name="webapp.WEB-INF.classes.dir" value="${webapp.WEB-INF.dir}/classes" />
           <property name="source.dir" value="${basedir}/src" />
           <property name="build.dir" value="${basedir}/build" />
           <property name="build.classes.dir" value="${build.dir}/classes" />
           <property name="build.jar.dir" value="${build.dir}/jar" />
           <property name="dist.dir" value="dist" />
           <property name="jarfile.name" value="struts_project.jar" />
           <!--set classpath for compile-->
           <path id="compile.classpath">
                    <path>
                            <fileset dir="${catalina.common.lib.dir}">
                                     <include name="*.jar"/>
                            </fileset>
                    </path>
                    <pathelement location="${webapp.WEB-INF.lib.dir}/struts.jar" />
           </path>
  </target>
  <!--delete previous folders-->
  <target name="delete" depends="init" description="delete directory">
           <delete dir="${build.dir}" />
           <delete dir="${dist.dir}" />
  </target>
  <!--create new folders-->
  <target name="create" depends="init" description="create directory">
           <mkdir dir="${build.classes.dir}" />
           <mkdir dir="${build.jar.dir}" />
           <mkdir dir="${dist.dir}" />
  </target>
  <!--compile sources-->
  <target name="compile" depends="delete, create" description="compile java sources">
           <javac srcdir="${source.dir}" destdir="${build.classes.dir}" failonerror="no">
                    <classpath refid="compile.classpath" />
           </javac>
  </target>
  <!--packaging-->
  <target name="package" depends="compile" description="package class files">
           <jar jarfile="${build.jar.dir}/${jarfile.name}" basedir="${build.classes.dir}"/>
  </target>
  <!--copy the jar file-->
  <target name="deploy" depends="package" description="deploy jar files">
           <copy todir="${dist.dir}">
                    <fileset dir="${build.jar.dir}">
                            <include name="**/*.jar"/>
                    </fileset>
           </copy>
  </target>
</project>

 

1. 기본구조

<?xml version=”1.0” encoding=”euc-kr”?>
 
<project name=”projectName” default=”targetNameN” basedir=”.”>
 
        <target name=”init”>………..</target>
 
        <target name=”compile” depends=”init”>………</target>
 
        <target name=”copyJSP” depends=”compile”>………</target>
        <target name=”copyJar” depends=”copyJSP”>………</target>
 
        <target name=”makeWar” depends=”copyJar”>………</target>
 
        <target name=”clean” depends=”makeWAR”>………</target>
 
<project>

 

1.1 Ant의 규칙

  

1.1 Project 요소 설정

속성 설명 필수
name    
default    
basedir    

 

1.2 Property 요소 속성

속성 설명 필수
name    
value 프로퍼티의 값을 지정 Name 속성을 사용했을 경우
둘 중의 하나를 반드시 사용
location 지정한 경로명의 절대 경로명을 값으로 지정
resource 프로퍼티 파일을 읽어 올 때 사용할 자원명을 지정 Name 속성을 사용하지 않은 경우
셋중의 하나를 반드시 사용해야 한다.
file 지정할 파일로부터 프로퍼티 목록을 읽어 온다
environment 환경 변수를 읽어 올 때 사용할 접두어를 지정
classpath 자원으로부터 프로퍼티 파일을 읽어 올 때 사용할 클래스패스  
classpathref 클래스패스로 사용할 경로를 <path>요소로부터 가져온다  
prefix Resource file속성을 사용하여 읽어 온 프로퍼티를 참조 할 때 사용할 접두어를 지정, 접두어 맨 뒤에 “.”가 포함되어 있지 않을 경우, 자동으로 “.”이 접두어 뒤에 붙는다.  

프로퍼티의 값을 사용할 때에는 ${프로퍼티이름} 형식을 사용

 

1.3 Target 요소 설정

속성 설명 필수
name    
depends 의존하고 있는 목록  목록인경우 콤마구분  
if 지정한 프로퍼티가 설정되어 있는 경우 타겟을 수행  
unless 지정한 프로퍼티가 설정되어 있지 않은 경우 타겟을 수행  
description    

 

  

경로 규칙

- 경로 규칙은 파일이나 디렉토리 또는 경로 집합을 사용하는 태스크나 <fileset>이나 <patternset>등에 적용된다.
- ‘*’ ----- 0개 또는 그 이상의 글자가 매칭된다.
- ‘?’ ----- 한 글자와 매칭된다.
- 디렉토리 지정에서’*’를 사용할 경우 디렉토리 트리에서 단 하나의 계층만을 가리키게 되는 반면에 ‘**’는 다계층을 나타낸다.
- ‘**’로 패턴이 끝나게 되면 디렉토리뿐만 아니라 모든 파일을 나타낸다.
Ant에서 excludes속성에 명시하지 않아도 자동으로 처리 대상에 제외되는 파일/디렉토리
**/*~, **/#*#, **/.#*, **/%*%,**/._*
**/CVS,**/CVS/**,**/.cvsignore
**/SCCS,**/SCCS/**
**/vssver.scc
**/.svn, **/.svn/**
**/.DS_Store

 

1.3.1 fileset/dirset 태그 속성  : 파일/디렉토리 집합을 사용하는 태스크에서 사용

속성 설명 필수
dir 파일 집합을 표시할 때의 루트 디렉토리 dir이나file중 한 개를 반드시 명시
file 한 개의 파일을 명시할 때 사용          (fileset만 해당)
casesensitive True일 경우 대소문자를 구분해서 처리, 기본값 true  
followsymlinks 심볼릭 링크를 따라갈지의 여부를 나타낸다 기본값 true  
includes(file) 처리대상에 포함시킬 디렉토리/파일, 속성대신 테그 가능  
excludes(file) 처리대상에 제외시킬 디렉토리/파일, 속성대신 테그 가능  
defaultexcludes 기본적으로 제외되는 파일을 제외시키고 싶지 않으면 defaultexcludes=’no’  

 

   예시

<copy todir=”backup”>
   <fileset dir=”${basedir}”  includes=”src/**,lib/*.jar,jsp,src/**”
           exclude=”**/*.bak”  defaultexcludes=”no” />
</copy>

 

1.3.2 patternset : 파일/디랙토리 집합의 공통부분 지정시(재사용)

- patternset 내에 fileset/dirset 태그 사용

- Includes, includesfile, excludes, excludefile 속성 지원

- Id 속성을 사용하여 패턴 집합의 이름을 지정

- 패턴 집합을 사용할 때에는 refid속성을 사용한다.

예시1) 기본

<patternset id=”commonJar”>
<include name=”servlet.jar”/>
<include name=”mail.jar”/>
<include name=”activation.jar”/>
<patternset>

 

예시2) refid

<pattern refid=”commonJar”/>

 

1.3.3 path : 경로목록을 공통적으로

- <path>에서 경로를 지정할 때에는 <pathelement>태그를 사용

- location 속성은 하나의 디렉토리 또는 파일을 나타낼 때 사용

- 여러 경로를 함께 표시 할 때 각각의 경로는 ‘;’ ‘:’을 사용하여 구분

<path id=”project.class.path”>
     <pathelement location=”classes”/>
     <pathelement path=”lib/servlet.jar;lib/commons-fileupload-1.0.jar”/>
</path>

 

1.3.3 classpath

<classpath>와 같이 경로를 사용하는 태그에서는 refid속성을 사용하여 <path>요소를 경로값으로 사용할 수 있다.

<classpath refid=”project.class.path”/>

 

2 기타 속성 

목록

설명
copy 하위 태그로 fileset, / direst 가능, 속성: todir
mkdir  
javac  
delete  
jar  

 

2.1. javac: 자바 소스 코드 컴파일

속성 설명 필수
srcdir 소스가 위치한 디렉토리를 지정 <src>요소가 사용되지 않은 경우 필수
destdir 생성된 클래스가 위치할 디렉토리를 지정  
includes 컴파일할 파일의 패턴 목록, 기본값 *.java  
classpath 컴파일할 때 사용할 클래스패스.
,<classpath>태그를 사용하여 지정가능
 
classpathref <path>로 지정한 경로를 클래스패스로 참조  
debug 디버그 정보 포함,  기본값 false  
optimize 최적화 사용,       기본값 false  
verbose 긴 결과 제공  
failonerror 오류가 발생하면 빌드 중지, 기본값 true  
encoding 소스 파일의 인코딩을 지정
javac –encoding 옵션과 동일
 
nowarn on을 값으로 가질 경우 컴파일할 때 –nowarn 옵션을 사용. 기본값은 off  
deprecation on을 값으로 가질 경우 –deprecation 옵션을 컴파일할 때에 사용, 기본값은 off  

 

예시

<javac srcdir=”소스 코드가 위치한 디렉토리
       destdir=”컴파일한 클래스가 위치한 디렉토리
       classpath=”클래스패스”>
…….
</javac>

 

2.2. jar: JAR 파일로 압축

- destfile 속성은 생성할 JAR 파일을 지정

- basedir 속성은 jar파일로 압축할 기본 디렉토리 지정

- includes, includesfile, excludes, excludesfile, defualtexcludes 속성 사용

예시

<jar destfile=”${dist}/lib/app.jar”  basedir=”${build}/classes” />

 

2.3. zip : ZIP 파일로 압축

- includes, includesfile, excludes, excludesfile, 속성 사용

- <zipfileset>은 압축되는 파일의 경로명을 변경 가능

속성 설명 필수
prefix ZIP 파일에 압축될 때 변경되어 들어갈 경로명  
fullpath 특정 파일의 변경될 경로를 지정  
filemode 유닉스 기반의 시스템에서 사용되며, 압축되는 파일의 모드를 지정. 기본값은 644  
dirmode 유닉스 기반의 시스템에서 압축되는 디렉토리의 모드를 지정. 기본값은 755  

 

2.4. war : 웹 어플리케이션 압축

- basdir 속성을 사용하여 해당 디렉토리를 WAR파일로 묶는다.

- lib 태그 지정한 파일들을 WEB-INF/lib 디렉토리에 위치하게 해준다.

- classes 태그는 지정한 디렉토리에 위치한 classes 파일들을 WEB-INF/classes디렉토리에 위치하게 해준다.

- webxml 속성은 지정한 파일을 WEB-INF/web.xml 파일로 복사한다

- includes, includesfile, excludes, excludesfile, defualtexcludes 속성 사용

- 파일을 묶을 때 파일의 경로를 변겨해주는 zipfileset 태그 사용 가능

예시

<war destfile=”main.war” webxml=”src/metadata/web.xml”>
   <fileset dir=”src/mainapp/html” />
   <fileset dir=”src/mainapp/j” />
   <lib dir=”lib”>
      <exclude name=”logging2.jar”/>
   </lib>
   <classes dir=”build/main/classes”/>
   <zipfileset dir=”src/imagefile/images” prefix=”images”/>
</war>

 

2.5. tar : TAR 파일의 생성

- basedir속성이나 <fileset> 태그 등을 사용하여 묶을 파일의 목록을 지정

- compression 속성을 사용하여 우너하는 방식으로 압축가능, “gzip”, “bzip2”,”none”값 지정

- tarfileset 태그는 파일을 묶을 때 파일의 경로를 변경해 주며, 파일에 대한 사용자 및 그룹을 지정할 수도 있다.

예시

<tar destfile=”${dist}/example.tar.gz” basedir=”${build}” compression=”gzip”/>

 

속성 설명 필수
mode 3자리 8진수값  
useranme 파일에 대한 사용자 이름을 지정, UID와는 다름  
group 파일에 대한 그룹 이르을 지정, GID와는 다름  
prefix ZIP 파일에 압축될 때 변경되어 들어갈 경로명  
fullpath 특정 파일의 변경될 경로를 지정  
preserveLeadingSlashes 맨 앞의 ‘/’를 유지할지의 여부를 지정, 기본값은 false  

 

2.6. javadoc : API 문서의 생성

- 소스 코드로부터 Javadoc API문서를 생성

- 옵션이 너무 많아서 생략^^;

 

2.7. copy : 파일 복사

- 지정한 디렉토리로 파일을 복사

- 개개의 파일을 복사할 수도 있고 디렉토리 단위로 복사할 수도 있다.

예시

<copy todir=”${build}/src”>
   <fileset dir=”${workspace}/src”/>
</copy>

 

속성 설명 필수
file 복사할 파일을 지정 <fileset>으로 복사할 파일 목록을 지정하지 않은 경우 필수
tofile 복사될 파일을 지정  
todir 원본을 복사할 디렉토리 지정
overwrite true인경우 기존에 존재하는 파일을 덮어 쓴다. 기본값 false  
preservelastmodified True인 경우 원본의 최종 수정 날짜를 유지.   기본값은 false  
includeEmptyDirs <fileset>으로 지정한 디렉토리 중 텅빈 디렉토리도 복사할지의 여부를 지정, 기본값은 true  
failonerror 파일이 없을 경우 빌드 중단, 기본값 true  
verbose 복사한 파일 목록, 기본값 false  

 

2.8. mkdir : 디렉토리의 생성

예시

<mkdir dir=”${build}/webapp/WEB-INF/classes” />

 

2.9. delete : 파일의 삭제

- file 속성 -  특정 파일을 삭제하기 위해 지정

- dir 속성 -  지정 디렉토리 및 그 하위 디렉토리까지 모두 삭제

- includes, includesfile, excludes, excludesfile, defualtexcludes 속성 사용

- <fileset> 태그를 사용하여 삭제할 파일의 집합 표시 가능 (단 파일만 삭제될 뿐 디렉토리는 삭제되지 않는다)

- includeEmptyDirs 속성 - true로 지정하면 텅빈 디렉토리까지 삭제

- failonerror 속성 – 오류시 빌드 중단, 기본값 true

- verbose속성 – 삭제할 파일 목록, 기본값 false

 

2.10. ant : 또 다른 빌드 파일의 실행

- 하나의 프로젝트가 여러 개의 서브 프로젝트로 구성되어 있는 경우 한번에 서브 프로젝트를 포함한 모든 프로젝트를 빌드함

속성 설명 필수
antfile 사용할 빌드 파일을 지정, 명시하지 않을 경우 build.xml파일 사용, dir 속성에 주어진 디렉토리에 대해 상대 경로로 명시해야 함  
dir 새로운 Ant 프로젝트의 basedir을 지정, 사용될 빌드 파일에서 basedir 속성을 지정하고 있다면 무시됨  
target 수행할 타겟을 지정  
output 새로운 Ant 프로젝트의 수행 결과를 저장할 파일을 지정  
inheritAll 기본값 true이며 새로운 Ant 프로젝트는 현재Ant 프로젝트의 모든 프로퍼티를 전달받는다.  
inheritRefs 기본값 true이며 새로운 Ant 프로젝트는 현재 Ant 프로젝트의 모든 참조를 전달받는다.  

 

2.11. java : 자바 실행

속성 설명 필수
classname 실행할 클래스 이름 둘 중 하나 필수
jar 실행할 jar 파일의 위치
classpath 사용할 클래스 패스를 지정  
classpathref 미리 지정한 <path>요소를 참조  
fork true인경우 새로운 가상 머신에서 클래스를 수행, 기본값은 false  
maxmemory 포크된 가상 머신에 할당할 메모리의 최대 크기를 지정 (fork false인 경우 무시)  
dir 가상 머신을 호출할 디렉토리(fork false인 경우 무시)  
output 결과 파일  
append 기본 파일에 연결하거나 겹쳐씀  

 

  예시

<java classname=”Add” classpath=”${basedir}/bin”>
   <arg value=”100”/>
   <arg value=”200”/>
</java>

 

2.12. native2ascii : 유니코드로의 변환..

- ResourceBundle 클래스나 Properties 클래스를 사용하여 프로퍼티 파일로부터 정보를 읽어올 때 파일에 있는 문자를 유니코드로 변환해준다.

- Src 속성은 변환할 파일들의 위치한 기준 디렉토리를 지정

- Dest 속성은 변환한 결과를 저장할 디렉토리

- includes, includesfile, excludes, excludesfile, defualtexcludes 속성 사용

- <include>,<exclude>태그를 사용하여 원하는 파일만 변환처리 가능

- encoding속성은 변환할 파일의 인코딩 지정(명시하지 않을 경우 JVM 기본 인코딩 사용)

- reverse 옵션은 이스케이프된 유니코드를 지정한 인코딩을 사용하는 문자열로 변환

 

2.13. buildnumber : 빌드 번호

- 파일에서 빌드 번호를 읽고 build.number를 설정한 다음 build.number+1의 값을 파일에 기록

예시

<buildnumber file=”buildnum.txt”/>

 

2.14. echo

- System.out(기본값), 파일, 로그, 수신기에 메시지를 기록

속성 설명 필수
message 기록할 텍스트 텍스트를 요소 컨텐츠로 사용하지 않을 경우 필수
file 결과 파일 선택
append 파일을 겹쳐 쓰지 않고 연결, 기본값 false  

  예시

<echo message=”Hello”/>
<echo> This is a message from Ant </echo>

 

2.15 tstamp

- DSTAMP, TSTAMP, TODAY 프로퍼티를 설정

- DSTAMP : yyyyMMdd

- TSTAMP : hhmm

- TODAY : MMM dd yyy

cf. <format> Java SimpleDateFormat 클래스에서 정의한 패턴을 사용해 현식을 변경하는데 쓰인다.