유효하지않음 2008. 11. 24. 11:34

[출처] 생각이...??

설치하기 

Linux(ubuntu)에서는 아래 한줄로 내려받기 + 설치 + 환경설정 끝.

  1. sudo apt-get install ant

      

윈도우에서는

  1. 다운로드 받는다.
    http://ant.apache.org/
  2. 압축을 풀어서 적당한 위치로 이동한다.
    C:\Program Files\apache-ant-1.7.1\     이정도 위치에
  3. 시작 > 제어판 > 시스템 > 고급 > 환경변수 로 들어가서
    - PATH 에 C:\Program Files\apache-ant-1.7.1\bin 추가
    - JAVA_HOME 변수 추가 (이미 설치된 자바의 위치 등록)

 

다음 명령으로 잘 설치 되었는지 확인 한다.

ant --version

 

 

SVN 사용하기

 

사이트 : http://subclipse.tigris.org/svnant.html

            http://svnkit.com/kb/user-guide-svnant.html                    

 

  1. 다운 로드    
    SvnAnt 1.2.x 버전을 다운 받는다.

     

  2. 설치
    /lib/*.jar 파일을 $ANT_HOME/lib 로 Copy 하면 끝.

 

예)

  1. <taskdef resource="org/tigris/subversion/svnant/svnantlib.xml"/>
    
  2. <target ..... >
        <svn username="guest" password="">
          <checkout url="http://subclipse.tigris.org/svn/subclipse/trunk/svnant/" revision="HEAD" destPath="svnant" />
        </svn>
    </target>
    

 

위 소스중 다음의 태그를 포함시키지 않으면, "failed to create task or type svn"를 만나게 될 것이다.

<taskdef resource="org/tigris/subversion/svnant/svnantlib.xml"/>


ㅇ Update

  1. <svn>
    <update dir="${target.web}" />
    </svn>


ㅇ commit

  1. <svn username="${svn.userid}" password="${svn.userpwd}">
        <commit message="변경 사항" dir="${target.web}" recurse="true" />
    </svn>


ㅇ auto file add

  1. <svn >
    <add>
    <svnFileSet dir="${target.web}">
    <svnUnversioned/>
    </svnFileSet>
    </add>
    </svn>


ㅇ 더 자세한 내용은

사이트에 직접 상세문서가 없다(나만 못찾는가?) .

antsvn을 설치하기 위해 받은 파일을 열어보면 doc 라는 디렉토리에서 상세 문서를 볼 수 있다


*.jar 를 classpath 로 잡기


웹서버 프로그램 컴파일시 /WEB-INF/lib/*.jar 파일을 classpath로 참조 하게 되는데 ant build시 일일이 적어 줘야 하는 부담이 있다.

특히나, cvs나 svn 같은 버젼관리 프로그램으로 다운받은 프로그램을 컴파일 할 경우 일일이 작성해서 만들 수 는 없는것이다.

그래서 다음과 같은 방법을 통해 동적인 참조를 만들어 본다.


컴파일시 다음과 같이 사용된다.

  1. <target name="compile" >
        <javac destdir="${svn.dest}/WEB-INF/classes" srcdir="${svn.dest}/WEB-INF/src" >
    <classpath >
  2. <fileset dir="${svn.dest}">
        <include name="**/WEB-INF/lib/*.jar" />
        <include name="**/WEB-INF/lib/.*.zip" />
    </fileset>
  3. </classpath> </javac>
    </target>


디렉토리가 없을 조건의 경우 만들기


ㅇ 디렉토리가 없으면 true가 되는 조건

  1. <condition property="check_dir" >
        <not>
            <available file="${svn.dest}/WEB-INF/classes"/>
        </not>
    </condition>


ㅇ위 조건이 참일 경우 디렉토리 만들기

  1. <target name="make_dir_classes" if="check_dir">
    <mkdir dir="${svn.dest}/WEB-INF/classes" />
    </target>


파일들을 이동


ㅇ 파일을 복사

  1. <copy todir="${project.dest}" file="some.file" />


ㅇ파일들을 복사

  1. <copy todir="${project.dest}" > <!-- to dir -->
    <fileset dir="${svn.dest}" /> <!-- from -->
    </copy>


ㅇ 일부 파일만 복사

  1. <copy todir="${project.dest}/WEB-INF/classes/" >
    <fileset dir="${project.dest}/WEB-INF/src/" includes="*.xml" />
    <fileset dir="${project.dest}/WEB-INF/src/" includes="*.propertie"/>
    </copy>


네이티브 명령어 실행

운영체제에 적절한 명령어를 실행 할 경우 <exec> 태그를 사용

네이티브 명령어
(testdb라는 데이타베이스 생성)

  1. psql -U postgres -c 'create database testdb'


ant에서는

  1. <exec executable="/usr/bin/psql"
    dir="." >
    <arg line="-U postgres -c 'create database testdb'" />
    </exec>


Ant Task를 사용하여 Java Class 이용

 
ant 명령어로 처리 할 수 없는 좀더 복잡한 로직에 대해서는 직접 java class를 만들어 이용 할 수 있다.

먼저 ant 소스부터 보자

  1. <target name="change_context_name" >
    <taskdef name="ccn" classname="com.action.ChangeContextName"/> <!-- Class 정의 -->
    <ccn context_name="testsrv"
    file="**/WEB-INF/sun-web.xml" /> <!-- 사용 -->
    </target>


ㅇ <taskdef /> 태그를 이용하여 사용자가 만든 클래스를 사용할수 있도록 정의

ㅇ <ccn />은 <taskdef /> 태그에서 정의된 name이다. 사용자가 임의로 바꿔 사용할 수 있다.


ChangeContextName 를 열어 보면 다음과 같다

  1. package com.action;

    public class ChangeContextName extends org.apache.tools.ant.Task
    {
        String context_name;
        public String getContext_name()
        {
           return context_name;
        }
        public void setContext_name(String context_name)
        {
           this.context_name = context_name;
        }

        public void execute()
        {
           System.out.println("실행이 되었다...... ^^");
           System.out.println("컨텍스트명["+this.context_name+"]");
        }
    }


ㅇ Ant Task가 되려면

  1. org.apache.tools.ant.Task를 상속 받아야 한다.
  2. public void execute(){ .... } 에서 실행이 된다
  3. attribute값을 전달 받으려면
    public void setXXXX(String val) 와 같이 사용한다.


out of memory

ant 구동중 out of memory를 만날경우

다음의 내용을 환경변수에 추가 하면된다.

  1. ANT_OPTS=-Xmx512M


사용자에게 입력받기

<input>태그를 이용하여 사용자로부터 값을 입력받도록 한다

  1. <target name="get-input">
    <input message="작업할 디렉토리명은?"
    addproperty="target.name" />
    <echo message="입력받은값 > [${target.name}]"/>
    </target>


ant-contrib사용(조건문 사용하기)

ㅇ 설치

http://ant-contrib.sourceforge.net/ > download page 접속 > ant-contrib package 클릭 > ant-contrib-1.0b3-bin.zip 다운로드
압출풀면 ant-contrib-1.0b3.jar 파일이 나옴
이파일을 ANT_HOME/lib/ 에 copy 하면 끝.

ㅇ 선언문

<taskdef resource="net/sf/antcontrib/antcontrib.properties" />

정의 해 주면 사용가능 해 진다

ㅇ 사용 태그

<if> <switch> <foreach> <trycatch> 태그가 사용 가능하다.

  • switch
  1. <switch value="${input.value}">
        <case value="1">
            <echo message="1의 경우..."/>
        </case>

        <default>
            <echo message="이도저도 아닌경우.."/>
        </default>
    </switch>
  • if
  1. <if> 
        <equals arg1="${foo}" arg2="bar" /> 
        <then> 
           <echo message="The value of property foo is bar" /> 
        </then> 
    <else> 
           <echo message="The value of property foo is not bar" /> 
    </else> 
    </if> 

  • foreach
  • tyrcatch