BLOG main image
정민군's Blog
miniya devlog

'ant'에 해당되는 글 3건

  1. 2006.10.17 ANT 설치
  2. 2006.10.17 BUILD.XML 작성
  3. 2006.10.17 Apache ANT Guide

ANT 설치

System/Server 2006. 10. 17. 21:21 by 정민군
Ant 다운로드 & 설치하기

Ant는 Apache Software Foundation의 프로젝트 가운데 하나이고, James Duncan Davidson가 Tomcat 소스를 빌드하기 위해서 개발했습니다. make와 유사하지만, ant는 XML 방식을 사용하고, 쉘 스크립트나 특정 플렛폼에서 사용하는 툴 대신에 범용적으로 사용할 수 있습니다.

간단한 Ant 설치하기

1. Ant 배포판을 다운 받고, /usr/local/ant 디렉토리에 압축을 풀어 놓습니다. 아래는 root 사용자로 이 과정을 수행한 예제입니다. Apache-Ant 배포판은 root 사용자의 홈 디렉토리(/root)에 다운로드 받은 상태라고 가정하겠습니다.

# cd /usr/local/
# tar jxf $HOME/apache-ant-1.5.4-bin.tar.bz2
# ln -s /usr/local/apache-ant-1.5.4/ ant


2. ANT_HOME 설정을 위해서 쉘 스크립트를 편집하고, PATH에 ant 실행 파일이 있는 디렉토리를 추가합니다. 이전 장에서 수행한 것처럼 /etc/profile.d 파일에 스크립트를 추가합니다.

ANT_HOME은 /usr/local/ant로
PATH에 ${ANT_HOME}/bin 디렉토리 추가
Note: $HOME을 환경 변수로 사용하는 방식은 리눅스의 표준 방식으로 이해하면 됩니다. echo $HOME 명령어를 실행하면, 해당 환경변수가 의미하는 내용을 콘솔에서 확인할 수 있습니다. 아래 예제를 확인해보십시오.

# echo $HOME
/home/rcleveng


java.sh


# /etc/profile.d/java.sh - Sets Java Environment

if [ -z "$JAVA_HOME" ]; then  
 if [ -e /etc/javaversion ]; then        
   javaver=`cat /etc/javaversion | head -1`  
 fi

 if [ -z $javaver ]; then      
   jdkpath=`ls -1 /usr/java/ | grep "$javaver" | head -1`      
   if [ "X$jdkpath" == "X" ]; then            
     jdkpath=`ls -1 /usr/java/ | head -1`        

   fi  
 else        
   jdkpath=`ls -1 /usr/java/ | head -1`  
 fi    
 export JAVA_HOME=/usr/java/$jdkpath    
 export ANT_HOME=/usr/local/ant
 export PATH=${PATH}:${JAVA_HOME}/bin:${ANT_HOME}/bin
fi


java.csh


# /etc/profile.d/java.csh - Sets Java Environment

if ( ! $?JAVA_HOME ) then    
 if ( -e /etc/javaversion ) then        
   set javaver = `cat /etc/javaversion | head -1 `
 endif if ( $?javaver ) then      
   set jdkpath = `ls -1 /usr/java/ | grep '$javaver' | head -1`      
    if ( $jdkpath == '' ) then            
     set jdkpath = `ls -1 /usr/java/ | head -1`
   endif  
 else        
   set jdkpath = `ls -1 /usr/java/ | head -1`    
 endif

 setenv JAVA_HOME /usr/java/$jdkpath  
 setenv ANT_HOME /usr/local/ant
 setenv PATH ${PATH}:${JAVA_HOME}/bin:{$ANT_HOME}/bin
endif



프로젝트 레이아웃

프로젝트 레이아웃(Project Layout)은 프로젝트 타입에 따라서 변경됩니다. 예를 들면 J2EE 프로젝트는 표준 자바 애플리케이션과 다른 레이아웃을 갖고 있습니다. 자바 애플리케이션에서 사용하는 전형적인 레이아웃은 루트 디렉토리에 하위 구조를 생성합니다. 서브 디렉토리에는 애플리케이션 소스, 클래스 파일, javadoc 파일, 프로젝트에서 사용하는 외부 라이브러리와 테스트를 위한 배포 파일(jar 파일)이 있습니다.

프로젝트 홈 디렉토리
+ -- build.xml (Ant 빌드 파일, ant를 사용하는 경우)
+ -- build.properties (Ant 빌드 파일에서 사용하는 Properties 파일. 선택적)
+ -- LICENSE (라이센스 파일)
+ -- src/ (자바 소스와 리소스)
    + -- org/...

    + -- META-INF/
    + -- META-INF/Manifest.mf (Manifest 파일은 JAR를 사용해서 생성)
+ -- classes/ / (컴파일된 .class 파일)
    + -- org/...
+ -- javadoc/ (Javadoc)
    |
    + index.html
    + org/...
+ -- deploy/ (배포하기 위한 애플리케이션 저장)
+ -- lib/ (프로젝트에서 사용하는 외부 라이브러리)


Hello World 자바 소스 생성하기

프로젝트를 시작하기 전에 프로젝트를 위한 디렉토리를 결정합니다. 여기서는 $HOME/projects/helloworld as the location of my project. Here is the list of steps I performed to set up the directory structure:

# mkdir $HOME/projects
# mkdir $HOME/projects
# mkdir $HOME/projects/helloworld
# mkdir $HOME/projects/helloworld/classes
# mkdir $HOME/projects/helloworld/src/otn
# cd $HOME/projects/helloworld/src/otn
# vi Main.java



Note: VI에서 삽입 모드로 변경하기 위해서는 'i' 키를 누릅니다. 물론 VI 대신에 여러분께서 편하게 사용할 수 있는 편집기를 사용해도 됩니다. 여기에서는 VI를 사용해서 설명하겠습니다.


package otn;

public class Main
{
       public static void main( String args[] )
       {
               System.out.println( "Hello World" );
       }
}



ESC 키를 누르고 'wq'를 입력하면 파일을 저장하고 VI를 종료합니다. 다음 명령을 사용해서 디렉토리 구조를 확인합니다.



# cd $HOME/projects
# find . -print
.
./helloworld
./helloworld/src
./helloworld/src/otn
./helloworld/src/otn/Main.java
./helloworld/classes






쉘에서 빌드 하기

자바 컴파일러(javac)를 사용해서 자바 소스 파일을 컴파일 합니다. C 컴파일러인 gcc에 익숙한 개발자라면, javac도 쉽게 사용할 수 있을 것입니다. javac를 사용할 때, 아래 내용을 반드시 확인해야 합니다.

자바 파일이 있는 소스 위치
클래스 파일이 생성되는 디렉토리
javac의 컴파일 컴파일 대상이되는 .java 파일
아래는 Main.java 파일을 컴파일 하기 위한 javac 명령어 사용 예제 입니다.

# cd $HOME/projects/helloworld
# javac -sourcepath src -d classes src/otn/Main.java
다음과 같이 생성된 파일 확인할 수 있습니다.

# cd $HOME/projects/helloworld/classes
# find . -name *.class -print
./otn/Main.class




Ant 빌드 파일 생성하기

다음과 같이 Ant 빌드 파일(build.xml)을 생성합니다.

빌드 타겟은 'make' 1개 설정
otn/ 서브 디렉토리에 있는 모든 .java 파일을 javac로 컴파일
빌드 소요시간을 알려주는 시간 표시
아래와 같은 build.xml이라고 불리는 $HOME/projects/helloworld 에 있는 파일 생성

<?xml version = '1.0' ?>
<project name = "OTN" default = "make" basedir = ".">
   <target name = "make">
       <tstamp />
       <javac  srcdir="src/" destdir = "classes/">
           <include name="otn/**"/>
       </javac>
   </target>
</project>

아래는 Ant 명령어를 수행한 예제입니다.

# ant
 Buildfile: build.xml
make:
 [javac] Compiling 1 source file to /home/rcleveng/projects/helloworld/classes
BUILD SUCCESSFUL
 Total time: 3 seconds


간단한 자바 애플리케이션을 완성했습니다.

BUILD.XML 작성

System/Server 2006. 10. 17. 21:18 by 정민군

build.xml의 구성

by kkaok
2003-06-02


Ant의 빌드파일은 확장자를 보면 알 수 있듯이 xml이다. 따라서 빌드파일의 최상단에는 xml의 정의해야 한다. 전체 구성은 <project>로 시작해서 </project>로 끝나고 그 안에 하나 이상의 target, Properties, path 등이 삽입된다.


xml 정의

<?xml version="1.0" encoding="euc-kr"?>


project
project는 name, default, basedir 세가지 속성을 가진다.

name은 프로젝트명이고 default는 실행타겟이 지정되지 않았을 때 기본적으로 실행되는 타겟명을 적는다. basedir은 처리되는 디렉토리 명으로 build.xml이 상위 폴더 아래 있다면 생략 가능하며 basedir="." 이런 식으로 적어 주면 된다.

<project name="kkaok" default="deploy">
...
</project>


Properties
프라퍼티는, 이름(name)과 값(value)을 한쌍으로 가지며. 이름은 대·소문자를 구별한다. 프라퍼티의 이름은 다른 곳에서 "${프라퍼티명}"으로 사용이 가능하다.

<property name="catalina.home" value="C:/Tomcat 4.1"/>
<property name="deploy.home" value="C:/kkaok_project/kr.pe.kkaok.board"/>


path, classpath
path와 clsaspath는 다음과 같은 형식을 가진다.

<classpath>
   <pathelement path="${classpath}"/>
   <pathelement location="lib/helper.jar"/>
</classpath>


내부요소(pathelement)로 path와 location이 있으며 path는 보통 이미 정의된 경로와 함께 사용할 때 사용되어지고 location은 단일한 파일을 설정하거나 디렉토리를 설정할 때 사용된다. 이외에 DirSets, FileSets, FileLists는, 내부에 <dirset>, <fileset>,<filelist> 요소로 지정할 수 있다.

<path id="compile.classpath">
   <pathelement location="${catalina.home}/common/classes"/>
   <fileset dir="${catalina.home}/common/lib">
       <include name="*.jar"/>
   </fileset>
   <fileset dir="lib">
       <include name="*.jar"/>
   </fileset>
</path>

target
target은 name, depends, if, unless, description 다섯 개의 속성을 가지며 다른 여러 타겟에 의존할 수 있다. 이것은 해당 타겟을 실행시키면 depends 된 여러 타겟을 함께 실행시킨다는 것이다.


depends : 이 타겟이 의존하는 타겟의 이름들.
if : 이 타겟을 실행하기 위해 설정되어야만 하는 프로퍼티의 이름.
unless : 이 타겟을 실행하기 위해서 설정되어선 안 되는 프로퍼티의 이름.
description : 이 타겟에 대한 설명.


실행 순서
<target name="A"/>
<target name="B" depends="A"/>
<target name="C" depends="B"/>
<target name="D" depends="C,B,A"/>
만약 위와 같이 타겟들이 서로 의존하고 있 D를 실행시킨다면

PROMPT>ant D

A,B,C,D 순으로 실행이 된다.


만약 명령창에서 그냥 ant만 하게 되면 project의 default로 정의된 타겟을 실행 시킨다. 위에서 A를 실행시키고 싶다면 아래처럼 하면 된다.

PROMPT> ant A

즉 여러개 실행 타겟 만들고 선별해서 실행 시킬 수 있다는 것이다. 너무나도 편리한 ant~~~


http://www.kkaok.pe.kr/


Apache ANT Guide

System/Server 2006. 10. 17. 21:10 by 정민군
Apache ANT Guide
요약 : Apache ANT Guide
작성자 : 최지웅
Article요약

아파치 그룹에서 내놓은 빌더툴인 ant1.4.1버젼을 이용하여 각각의 태그와 그에 대한 내용을
공부해보도록 하죠.. *^^*
이툴을 이용하여 java compile및 ejb-jar파일의 생성, deploy및 sql파일의 처리, database에 대한
접속을 통하여 많은 일들을 할수 있도록 구성되어져 있습니다.
각 사용법과 샘플을 통하여 사용법을 익혀보도록 합시다


Article 내용
****************************
*              Ant 시작하기               *
****************************

.인스톨하기
- 아래의 사이트로부터 다운받는다.
       http://jakarta.apache.org/builds/ant/release/v1.4.1/bin/

- 권장사항 jdk1.2버젼이상을 추천한다.
- Windows
설치된 디렉토리가 c:\ant\. 로 가정했을경우에

       set ANT_HOME=c:\ant
       set JAVA_HOME=c:\jdk1.3.1
       set PATH=%PATH%;%ANT_HOME%\bin

의 환경변수를 잡아주도록 한다.

- Unix(bash)

       export ANT_HOME=/usr/local/ant
       export JAVA_HOME=/usr/local/jdk1.3.1
       export PATH=${PATH}:${ANT_HOME}/bin

****************************
*              Ant 실행하기               *
****************************

Command-line option

ant [options] [target [target2 [target3] ...]]
Options:
-help                  print this message
-projecthelp           프로젝트에 필요한 도움을 보여준다
-version              현재 버젼은 보여준다
-quiet                 아무런 표시없이 build한다
-verbose               verbose모드를 실시한다.
-debug                 dubugging을 한다.
-emacs                 로깅정보를 만들어낸다
-logfile file          주어진 파일로 로그를 출력한다.
-logger classname      해당클래스를 이용하여 로깅을 수행한다.
-listener classname    리스너클래스를 추가한다.
-buildfile file        대상 build파일을 정의한다.
-find file             루트로부터 buildfile을 찾는다.
-Dproperty=value       build설정에 필요한 프로퍼티를 찾는다.

ant를 batch파일 없이 직접 실행하고 싶다면 아래와 같은 옵션을 이용하여 실행하면 된다

java -Dant.home=c:\ant org.apache.tools.ant.Main [options] [target]

*************************************
*              SimpleBuild파일 만들어보기                *
*************************************

상위 tag부터 소개한다.

<project name="" default="" basedir=""></project>

name -- 이 프로젝트의 설정이름을 기록한다.( 안써두 무방 )
default -- target이 지정되지 않았을때 default target으로 쓴다. (반드시 기술)
basedir -- 현재 build를 사용할 디렉토리를 설정한다. 보통 현재디렉토리를 많이 사용한다.(안써두 됨)

================================================================
<target></target>

현재 build되는 target은 다른 target에 의존하여 build되어질수 있다. 그럴경우에 이 tag를 이용하여
build하도록 한다.

       <target name="A"/> -- 현재 build되어진다.
       <target name="B" depends="A"/> -- A가 정상적으로 이루어져야만 B의 build가 이루어진다.
       <target name="C" depends="B"/>  -- 위와 같은 방법으로 recursive하게 이루어진다.
       <target name="D" depends="C,B,A"/>

이해가 금방 되리라 본다.

여기서 조합으로 if-unless를 사용할수도 있다.

1: <target name="build-module-A" if="module-A-present"/>
2: <target name="build-own-fake-module-A" unless="module-A-present"/>
위의 내용에서 module-A-present에 따라서 두가지 형태로 분기되면 반드시 한가지는 실행되어지는
모습을 볼수 있다. module-A-present가 성공했을경우 1번을 수행하고, 실패했을경우는 2번으로
분기되어서 실행될수 있도록 한다.

target은 다음과 같은 속성을 갖는다.
name -- target의 이름.(반드시 기술하여야 함)
depends -- 콤마(,)로 구분하며 다른 target에 영향을 받으며 build되어진다.(안써두 됨)
if -- 현재 target이 실행될것인지를 결정(안써두 됨)
unless -- unless의 target이 실패했을경우 처리되는 부분(안써두 됨)
description -- description(안써두 됨)


*************************************
*              Properties의 사용                           *
*************************************
<property name="foo.dist" value="dist"/>
dist란 value를 foo.dist로 setting한다.

<property file="foo.properties"/>
foo.properties파일을 읽어들여 build.xml파일의 프로퍼티로 세팅한다.

<property resource="foo.properties"/>

<property file="${user.home}/.ant-global.properties"/>
속성을 겹쳐서 프로퍼티 파일을 읽어들일수도 있다.        


*************************************
*              Path-Link의 사용                                   *
*************************************
<classpath>
     <pathelement path="${classpath}"/>
     <pathelement location="lib/helper.jar"/>
</classpath>

클래스패스링크를 사용하여 path 또는 classpath를 추가시킬수 있다.
패스를 계속적으로 추가하고자 할때는 ; or :를 이용하여 추가할수 있다.

위의 내용을 아래와 같이 요약하여 한줄에 추가시킬수 있다.

<classpath path="${classpath}"/>

*************************************
*             Referencing하기                                    *
*************************************

<project ... >
 <target ... >
   <rmic ...>
     <classpath>
       <pathelement location="lib/"/>
       <pathelement path="${java.class.path}/"/>
       <pathelement path="${additional.path}"/>
     </classpath>
   </rmic>
 </target>

<!-- =====위의 내용은 rmic를 이용하여 클래스패스를 이용한 컴파일을 시도하기 위한 스크립트이다 -->

 <target ... >
   <javac ...>
     <classpath>
       <pathelement location="lib/"/>
       <pathelement path="${java.class.path}/"/>
       <pathelement path="${additional.path}"/>
     </classpath>
   </javac>
 </target>

  <!-- =====위의 내용은 javac를 이용하여 클래스패스를 이용한 컴파일을 시도하기 위한 스크립트이다 -->
</project>


위의 샘플에서는 불필요한 classpath가 계속 쓰여지고 있다. 안좋은 방법이므로 아래와같이 다시 쓸수 있다.

<project ... >
 <path id="project.class.path">  <----- path-id를 지정해놓고서 아래쪽에서 패스를 참조하도록 한다.
   <pathelement location="lib/"/>
   <pathelement path="${java.class.path}/"/>
   <pathelement path="${additional.path}"/>
 </path>



 <target ... >
   <rmic ...>
     <classpath refid="project.class.path"/>  <--- 위의 ref-id로 설정해 놓은 패스를 참조하여 사용하도록 한다.
   </rmic>
 </target>

 <target ... >
   <javac ...>
     <classpath refid="project.class.path"/>
   </javac>
 </target>
</project>



*************************************
*              Sample예제                                           *
*************************************

--현재 디렉토리 구성을 보도록 하자.
       WeblogicBuildTest/
       WeblogicBuildTest/src
       WeblogicBuildTest/src/Echo.java
       WeblogicBuildTest/src/EchoHome.java
       WeblogicBuildTest/src/EchoEJB.java
       WeblogicBuildTest/src/EchoClient.java

--아래의 내용을 이용하여 weblogicaux.jar를 이용하여 build를 시도한다.
-- 컴파일에 성공하면 현재 클래스파일들을 이용하여 MyProject-현재날짜.jar파일로 묶는다


도스명령 : ant -Dweblogic.classpath=c:\weblogic\lib\weblogicaux.jar

<project name="MyProject" default="dist" basedir=".">

 <!-- set global properties for this build -->
 <property name="src" value="src"/>
 <property name="build" value="build"/>
 <property name="dist"  value="dist"/>

 <property name="weblogicaux.jar"   value="${weblogic.home}/lib/weblogicaux.jar" />


 <target name="init">
   <!-- Create the time stamp -->
   <tstamp/>
   <!-- Create the build directory structure used by compile -->
   <mkdir dir="${build}"/>
 </target>

 <target name="compile" depends="init">
   <!-- Compile the java code from ${src} into ${build} -->
   <javac srcdir="${src}" destdir="${build}"
       classpath="${weblogic.classpath}:${build}"
   />
 </target>

 <target name="dist" depends="compile">
   <!-- Create the distribution directory -->
   <mkdir dir="${dist}/lib"/>

   <!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
   <jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar" basedir="${build}"/>
 </target>

 <target name="clean">
   <!-- Delete the ${build} and ${dist} directory trees -->
   <delete dir="${build}"/>
   <delete dir="${dist}"/>
 </target>
</project>



==================================================
==================================================
Directory Base Tasks
==================================================
==================================================

1. Patterns

exclusion과 inclusion에 대한 패턴을 정의 할수 있으며, 우리가 일반적으로 사용하는
wild card *, ?를 이용하여 표현할 수 있다.

예를 들면
       *.java  는  .java의 확장자를 가진 모든 파일을 표현한다.
                x.java, FooBar.java 등등


*는 파일에 대한 내용을 보여주고자 할때 사용하는 패턴이며

**는 디렉토리의 이름을 이용하여 표현할수 있게끔 만드는 확장자 이름이다.
또한 0개 이상의 디렉토리를 표현하고자 할때 이패턴을 사용하게 된다.

예를 들어 /test/**는 test라는 디렉토리 안의 파일 및 다른 서브디렉토리를 모두 포함하는 wildcard로서 동작된다.

Example Pattern

**/CVS/* :
       CVS/Repository
       org/apache/CVS/Entries
       org/apache/jakarta/tools/ant/CVS/Entries
     
But not:
       org/apache/CVS/foo/bar/Entries (foo/bar/ 부분이 일치하지 않는다.)
--------------------------------------------
org/apache/jakarta/** :
       org/apache/jakarta/tools/ant/docs/index.html
       org/apache/jakarta/test.xml
     
But not:
       org/apache/xyz.java
--------------------------------------------
org/apache/**/CVS/* :
       org/apache/CVS/Entries
       org/apache/jakarta/tools/ant/CVS/Entries
   
But not:
       org/apache/CVS/foo/bar/Entries
     
---------------------------------------------

예제

<copy todir="${dist}">
 <fileset dir="${src}"
          includes="**/images/*"
          excludes="**/*.gif"
 />
</copy>

src의 하위 디렉토리에서 **/images/* 패턴에 적용되는 것을 모두 복사하여 dist디렉토리로
복사한다. (현재 디렉토리에 있는 모든 *.gif인 파일은 제외하구 옮긴다.



*************************************
*             FileCopy하기                                           *
*************************************

새로운 Fileset이나 file을 이용하여 파일/디렉토리로 카피할수 있다.

Paramters :
file -- 카피할 파일을 지정한다. 하나 또는 하나이상의 file or fileset을 지정해야 한다.
preservelastmodified -- 원본파일과 같을 경우 카피를 시도한다. 최종 수정본과 현재 대상본이 같아야 한다.(default : no)
tofile -- 카피되어질 파일이름을 지정한다. tofile or todir이 사용되어진다. fileset을 사용하게 된다면 todir로만 사용되어져야 한다.
todir -- 카피되어질 디렉토리를 설정한다
overwrite -- 대상디렉토리에 해당 파일이 존재할경우 overwrite할지 새롭게 만들지를 결정한다.  Defaults to "no".
filtering -- 카피도중에 필터를 사용하여 카피를 할것인지를 결정한다. Defaults to "no".  
flatten -- 소스디렉토리의 하위구조를 무시하고 모든 내용을 한디렉토리로만 복사한다.  Defaults to "no".  
includeEmptyDirs -- FileSet에 포함된 빈 디렉토리도 카피할수 있도록 한다. Defaults to "yes".


Examples
------------------------------------------------
1개의 파일 복사하기
<copy file="myfile.txt" tofile="mycopy.txt"/>

파일을 디렉토리로 복사하기
<copy file="myfile.txt" todir="../some/dir/tree"/>

한디렉토리를 다른 디렉토리로 복사하기
<copy todir="../new/dir">
   <fileset dir="src_dir"/>
</copy>

src_dir밑의 .java파일을 제외한 것을 ../dest/dir디렉토리로 복사

 <copy todir="../dest/dir" >
   <fileset dir="src_dir" >
     <exclude name="**/*.java"/>
   </fileset>
 </copy>

 <copy todir="../dest/dir" >
   <fileset dir="src_dir" excludes="**/*.java"/>
 </copy>

디렉토리에 있는 파일들을 대상으로 확장자 bak를 붙여서 복사하도록 한다.

 <copy todir="../backup/dir" >
   <fileset dir="src_dir" />
   <mapper type="glob" from="*" to="*.bak"/>
 </copy>


원본 디렉토리의 TITLE이라는 문자를 Foo Bar로 대치하여 복사한다.

 <copy todir="../backup/dir" >
   <fileset dir="src_dir" />
   <filterset>
     <filter token="TITLE" value="Foo Bar" />
   </filterset>
 </copy>


유사 태그로서 copydir, copyfile태그가 있다.

*************************************
*             Delete하기                                           *
*************************************
하나의 파일을 지우거나, 서브디렉토리 및 하나이상의 fileset등을 이용하여 지울수
있도록 한다.

Parameter는 CopyFile과 유사하다. 추가가 된것을 보도록 하자.

failonerror -- 파일 삭제에 실패했을 경우, build를 멈추고 현재의 스크린에 해당 사항을 보여주도록 한다.
includeEmptyDirs -- 빈디렉토리까지 모두 삭제하도록 한다.


Examples

<delete file="/lib/ant.jar"/>
/lib/ant.jar 을 삭제한다.

 <delete dir="lib"/>
lib디렉토리의 모든 파일 및 서브디렉토리를 가차없이 삭제한다.

 <delete>
   <fileset dir="." includes="**/*.bak"/>
 </delete>

현재 디렉토리및 하위디렉토리에서 bak의 확장자를 가진 파일을 모두 삭제한다.

 <delete includeEmptyDirs="true" >
   <fileset dir="build" />
 </delete>

build자신을 포함하고 있는 디렉토리이면 모든 파일과 하위디렉토리를 삭제하도록 한다.


*************************************
*             Echo                                                           *
*************************************
현재 시스템 콘솔이나 파일로 메시지를 출력하도록 한다.

message -- 보여줄 메시지를 기술한다.
file -- 이 메시지를 해당파일로 출력하도록 한다.(default no)
append -- 현재 파일이 존재하고있으면 추가시키는 모드를 설정한다.

Examples
 <echo message="Hello world"/>
 
<echo>
요부분은 해당 콘솔에 나오는 글자입니다.!!! 바보야~~ ㅋㅋ
</echo>

*************************************
*             JAR파일 만들기                                   *
*************************************
해당 task를 이용하여 jar파일을 생성할수도 있다.
ZIP파일을 묶는 task과  같은 형식으로 동작하여 각각의 묶일 파일이나 디렉토리 모두를 지정할수 있다.

<jar> </jar>tag에 반드시 들어가야하는 속성은 jarfile이란 태그로서 해당 jar파일의 이름을 지칭한다.
jarfile -- 생성할  jar-file
basedir -- jar-file을 생성할 기본디렉토리를 지정. Default No
compress -- 저장된 데이터뿐만 아니라 압축된 형태까지 모두 묶는다, No
encoding -- 묶을 파일의 character encoding set을 지정한다.웬만하면 바꾸지 말기
filesonly -- 엔트리에 들어있는 파일만 묶는다. No
includes -- ,(comma)로 분리되어 있는 패턴파일 리스트를 반드시 포함하여 묶는다. No
includesfile -- 각각에 패턴에 해당하는 파일을 이용하여 묶도록 한다. No
excludes -- 파일패턴에 대한 파일 제외하고 묶는다. No
excludesfile -- No
defaultexcludes -- defaultexclude를 사용할지 안할지를 결정한다. No
manifest -- manifest파일을 사용하도록 한다. No
update -- 만약에 해당 jar파일이 존재한다면 update할것인지 overwrite할것인지를 결정한다.  No
whenempty -- 패턴에 매핑되는 파일이 없더라도 동작을 할것인지를 결정한다. No


Examples :

 <jar jarfile="${dist}/lib/app.jar" basedir="${build}/classes"/>
${build}/classes디렉토리에 있는 모든 파일들을 ${dist}/lib 디렉토리의 app.jar란 이름으로 압축한다.

-----------------------------------------------------------
 <jar jarfile="${dist}/lib/app.jar"
      basedir="${build}/classes"
      excludes="**/Test.class"
 />
${build}/classes디렉토리의 Test.class를 제외한 모든 파일들을 ${dist}/lib디렉토의 app.jar파일의 이름으로 압축한다.

------------------------------------------------------------
 <jar jarfile="${dist}/lib/app.jar"
      basedir="${build}/classes"
      includes="mypackage/test/**"
      excludes="**/Test.class"
 />
${build}/classes디렉토리에 있는 모든 파일들을 ${dist}/lib 디렉토리의 app.jar란 이름으로 묶는다.
다 묶는것이아니라 ${build}/classes/mypackage/test밑의 파일만을 사용하며 Test.class를 제외한다.


 <jar jarfile="${dist}/lib/app.jar">
   <fileset dir="${build}/classes"
            excludes="**/Test.class"
   />
   <fileset dir="${src}/resources"/>
 </jar>

${build}/classes와 ${src}/resource디렉토리를 app.jar라는 이름으로 함께 묶는데 Test.class를 제외하여 묶는다
--------------------------------------------------------------------------------


*************************************
*            Java Execute                                           *
*************************************
이제 tag를 이용한 java명령을 실행시켜보도록 하자.

우선 해당 tag안에 들어가는 parameter부터 확인해 보도록 하자.
한가지 조심해야 할것이 있는데 프로그램코딩중에 System.exit()부분을 잘 써야 한다
만약 그것을 써버리게 되면 ant또한 같은 vm상에서 동작중이므로 ant까지 빠져나와버리는
경우가 발생할수 있다.


classname -- 실행시킬 자바 클래스명을 기술한다. jar또는 class name이 될수 있다.
jar -- 실행시킬 jar파일의 위치를 표시한다.만약 이 옵션이 선택되어 진다면 반드시 Fork의 속성을 true로 만들어야 한다.
args -- 실행되어질 클래스의 argument를 지정한다. deprecate되었으면 현재는 <arg>태그를 사용한다. No
classpath -- 사용할 클래스패스를 지정한다. No
classpathref -- 클래스패스를 사용하는데 PATH에 정의되어진 reference를 이용한다. No
fork -- 다른 vm상에서 클래스를 trigger하고 싶다면 설정한다. No
jvm -- JVM에 대한 option command를 사용한다. fork옵션이 비활성화 되었으면 무시된다. No
jvmargs -- fork된 VM에 대한 argument를 사용한다. deprecated됐으며 <jvmarg> 를 사용한다. No
maxmemory -- fork된 vm에 대한 최대 메로리값을 할당한다. No
failonerror -- 0이 아닌 다른 returncode가 오게 되면 build process를 중지한다. 반드시 fork가 true일때만 사용가능하다. No
dir -- The directory to invoke the VM in. No
output -- 지정된 파일을 output으로 사용한다. No


Example
 
      <java classname="test.Main" >
        <arg value="-h"/>
        <classpath>
          <pathelement location="\test.jar"/>
          <pathelement path="${java.class.path}"/>
        </classpath>
      </java>

Examples

 <java classname="test.Main"/>
 <java classname="test.Main" fork="yes" >
   <sysproperty key="DEBUG" value="true"/>
   <arg value="-h"/>
   <jvmarg value="-Xrunhprof:cpu=samples,file=log.txt,depth=3"/>
 </java>

*************************************
*            Java Compile                                           *
*************************************

javac를 이용하여 자바프로그램을 컴파일할 수 있도록 하는 태그로서 각종 옵션들이 이쪽에 들어가게 된다.

Parameters
====================
srcdir -- 컴파일대상의 자바파일들의 위치를 나타낸다.
destdir -- compile된 클래스 파일들이 들어가게될 디렉토리를 지칭한다.  No
includes -- ,(comma)로 분리된 파일의 패턴을 이용하여 포함된 파일들을 모두 컴파일한다. No
includesfile -- include패턴에 명명된 파일을 포함하여 compile한다. No
excludes -- exclude패턴에 명명된 제외을 포함하여 모두 compile한다. No
excludesfile -- exclude패턴에 명명된 제외을 포함하여  compile한다. No
defaultexcludes -- default excludes를 사용하여 compile한다. No
classpath -- 클래스 패스를 사용할 경우에 기술한다. No
bootclasspath -- bootstrap class file의 위치를 기술한다. No
classpathref -- PATH reference에 주어진 클래스패스를 사용하여 compile한다. No
bootclasspathref -- PATH reference에 주어진 bootstrap 클래스패스를 사용하여 compile한다. No
extdirs -- 설치된 extension의 위치. No
encoding -- source file encoding. No
nowarn -- compiler로 -nowarn옵션을 전달한다. No
debug -- compile time debug모드로 설정한다 No
optimize -- optimize옵션을 사용한다. no
deprecation -- deprecation옵션을 사용한다. No
target -- 명시된 VM을 사용하여 class파일을 생성하도록 한다. No
verbose -- 출력을 verbose모드로 설정한다. No
depend -- dependenty-tracking compiler모드를 사용한다. No
includeAntRuntime -- Ant run-time lib를 포함하여 compile한다. default = yes, required No
includeJavaRuntime -- 실행되는 VM으로부터 run-time lib를 포함하여 컴파일한다. defaults to no. Required No
fork -- 외부의 JDK compiler를 사용하여 javac를 수행한다. defaults to no. required No
memoryInitialSize -- VM상의 초기 메모리 사이즈를 설정한다. (examples: 83886080, 81920k, or 80m) , required No
memoryMaximumSize -- VM상의 최대 메모리 사이즈를 정한다. externally javac일 경우 사용되면 다른경우는 무시된다.
(examples: 83886080, 81920k, or 80m) No
failonerror -- 컴파일 에러가 발생했을 경우 계속 컴파일을 시도할것인지를 결정. defaults to true. required No
source -- command line switch로 -source를 사용한다. No


Examples
 <javac srcdir="${src}"
        destdir="${build}"
        classpath="xyz.jar"
        debug="on"
 />
${src} directory에 있는 모든 .java파일을 xyz.jar를 이용하여 compile한후 debug 정보는 연 상황에서 build디렉토리에
class파일들을 위치시킨다.

-------------------------------------------------------------------------
 <javac srcdir="${src}"
        destdir="${build}"
        includes="mypackage/p1/**,mypackage/p2/**"
        excludes="mypackage/p1/testpackage/**"
        classpath="xyz.jar"
        debug="on"
 />

  ${src} directory의 파일들을 컴파일하는데 조건은 xyz.jar를 클래스패스로 이용하고, mypackage/p1/**,mypackage/p2/**패턴을
  따르는 소스(.java)를 포함하고, mypackage/p1/testpackage/**는 컴파일 대상에서 제외된다.


 <javac srcdir="${src}:${src2}"
        destdir="${build}"
        includes="mypackage/p1/**,mypackage/p2/**"
        excludes="mypackage/p1/testpackage/**"
        classpath="xyz.jar"
        debug="on"
 />

 2개의 source path를 사용하여 compile하도록 한다. 나머지 방법은 위의 방법과 동일하다.
위의 방법은 아래와 같이 재구성되어질수 있다.
 <javac destdir="${build}"
        classpath="xyz.jar"
        debug="on">
   <src path="${src}"/>
   <src path="${src2}"/>
   <include name="mypackage/p1/**"/>
   <include name="mypackage/p2/**"/>
   <exclude name="mypackage/p1/testpackage/**"/>
 </javac>

추가 ANT 메뉴얼
http://50001.com/sub/down/Ant_manual_1.mht
http://50001.com/sub/down/Ant_manual_2.mht


1 

카테고리

분류 전체보기 (46)
Technic (5)
Language (16)
Database (8)
System (5)
Algorithm (1)
Design (1)
Tool (3)
Framework (2)
Network (1)
Utility (1)
SmartPhone (2)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

달력

«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

글 보관함