Java - Ant 설치 및 Compile 사용

Posted 07 14, 2009 15:48, Filed under: Language/JAVA

1. Installing Ant

 Ant 다운로드
http://ftp.apache-kr.org/ant/binaries/

다운로드 후 적당한 곳에 압축을 푼다.
예) C:\Ant
TIP) 압축풀기 위치 지정 시 C:\ 이런 식으로 지정하면 C:\apache-ant-1.6.1 폴더가 생성된다. 하지만 경로라든가 패스 걸어줄 때 폴더명이 길면 귀찮으므로 ant라고 만 폴더명을 변경해 주자.

l         환경변수 설정
시스템 환경변수에
ANT_HOME – C:\ant
PATH - %ANT_HOME%\bin;
이렇게 추가한다
TIP) 설정이 제대로 되었는지 확인하려면, 커맨드를 실행해서 아무 위치에서 ant 라는 명령을 실행했을 때
C:\Documents and Settings\narr>ant

Build file: build.xml does not exist!
Build failed
이렇게 나오면 정상적으로 환경변수가 설정된 것이다.



2. Using Ant



①       간단한 build.xml 파일 만들기
ant에서는 각 프로젝트 별로 빌드 파일이 필요하다. 그것이 바로 build.xml파일이다.
이 빌드 파일에는 프로젝트 소스 디렉터리, 컴파일 된 클래스파일이 위치할 디렉터리, 외부에서 참조해야 하는 라이브러리들의 디렉터리, 자바 도큐먼트 생성에 관한 정보 등 ant 실행에 관한 모든 내용을 정의해 줄 수 있다.
위의 실행 테스트에서 Build file: build.xml does not exist! Build failed 이라는 메시지는 현재 위치한 폴더에 빌드 파일이 없으므로 ant를 실행할 수 없다는 메시지다. 당연히 ant를 구동하기 위해서는 빌드파일과 같은 위치의 폴더에서 실행 해야 한다. 따라서 프로젝트의 폴더구성이 중요하다.


                      

그림 1. 간단한 웹 어플리케이션의 폴더구조 – 예시



위의 그림과 같은 예에서는
common – 어플리케이션의 공통 모듈
src_dir – 프로젝트 소스 디렉터리 (.jsp, .html, 등)
WEB-INF - src에는 서블릿 소스파일, classes에는 컴파일 된 클래스파일이 위치한다.

여기서는 예로 common >> compile 폴더 내에서 ant실행을 하고, build.xml 파일도 위치시키도록 하겠다.

※Example Build.xml

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

    <Description>

        Simple example build file

    </description>

  <!-- set global properties for this build -->

  <property name="src" location="src"/>

  <property name="build" location="build"/>

  <property name="dist"  location="dist"/>



  <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"

        description="compile the source " >

    <!-- Compile the java code from ${src} into ${build} -->

    <javac srcdir="${src}" destdir="${build}"/>

  </target>



  <target name="dist" depends="compile"

        description="generate the distribution" >

    <!-- 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"

        description="clean up" >

    <!-- Delete the ${build} and ${dist} directory trees -->

    <delete dir="${build}"/>

    <delete dir="${dist}"/>

  </target>

</project>





②       build.xml 파일에서 정의 하는 태그

A.        Project 태그

Attribute
Description
Required

name
the name of the project.
No

default
the default target to use when no target is supplied.
Yes.

basedir
the base directory from which all path calculations are done. This attribute might be overridden by setting the "basedir" property beforehand. When this is done, it must be omitted in the project tag. If neither the attribute nor the properties have been set, the parent directory of the buildfile will be used.
 

예)<project name=“ant_project” default=”” basedir=”C:\ant_project”>
</project>
※프로젝트 태그 안에 다른 태그들이 정의 되어야 한다.


B.        Property 태그
여러 가지 필요에 따른 속성들을 정의 하는 태그이다
간단하게 name, value 정도로만 이루어 진다.
예) <property name = “src.dir” value = “${basedir}\WEB-INF\src”/>
    <property name = “lib.dir” value = “${basedir}\common\lib”/>
    <property name = “class.dir” value = “${basedir}\WEB-INF\classes”/>
    <property name = “doc.dir” value = “${basedir}\common\doc”/>
    <property name = “doc_header” value = “Jakarta Ant Test Project”/>
    <property name = “doc_title” value = “${doc_header}”/>
    <property name = “doc_footer” value = “나르^^의 블로그”/>



C.       Target 태그

Attribute
Description
Required

name
The name of the target.
Yes

depends
A comma-separated list of names of targets on which this target depends.
No

if
The name of the property that must be set in order for this target to execute.
No

unless
The name of the property that must not be set in order for this target to execute.
No

description
A short description of this target's function.
No




Target은 ant 명령 중 일종의 옵션을 설정하는 것이라고 보면 된다.
예)
<target name = “clear” description = “프로젝트의 도큐먼트, 클래스파일을 삭제한다”>
     <delete dir = “${doc.dir}”/>
     <delete dir = “${class.dir}”/>
</target>

<target name = “allmake” depends = “makedoc, compile, makejar” description = “프로젝트의 도큐먼트, 클래스파일, 압축파일을 생성한다”/>

<target name = “makedoc” description = “프로젝트의 도큐먼트를 작성한다”>
     <java doc
     encoding = “EUC-KR”
     sourcepath = “${src.dir}”
     destdir = “${doc.dir}
     author = “true” version = “true” private = “true” use = “true”
     windowstitle = “${doc_title}”
      doctitle = “${doc_title}”
     header = “${doc_header}”
     footer = “${doc_footer}”>
     </javadoc>
</target>

<target name = “compile” description = “프로젝트 소스를 컴파일 한다”>
     <javac
     srcdir = “${src.dir}”
     destdir = “${class.dir}”>
          <classpath refid = “project.class.path”/>
     </javac>
</target>

<target name = “makejar” depends = “compile” description = “프로젝트 압축파일을 만든다”>
     <jar jarfile="${lib.dir}/ant_test.jar" basedir = “${class.dir}”/>
</target>



D.        Path-like Structures
ant에서 클래스패스를 지정할 때 <classpath>태그를 사용한다.
<classpath>태그의 속성에는 <pathelement>, <fileset>, <dirset>, <filelist>가 있다.
<fileset>태그는 jar파일 같은 압축파일을 지정할 때,
<dirset>태그는 *.class파일이 포함된 디렉토리를 지정할 때,
<fileslist>태그는 미리 정의된 클래스파일들의 리스트를 지정할 때 사용된다.
위의 예중 <classpath refid = “project.class.path”/>부분이 클래스패스를 설정한 부분이다.
예)
<path id="project.class.path">

                     <pathelement location="${lib.dir}/activation.jar" />

                     <pathelement location="${lib.dir}/classes12.zip" />

                     <pathelement location="${lib.dir}/tools.jar" />

                  <pathelement location="${lib.dir}/servlet.jar" />

           </path>



③       테스트 빌드 파일 전체 1

<?xml version='1.0' encoding='EUC-KR'?>

<project name='ant_project' default='' basedir='C:\HOMEPAGEwww'>
<!--
    아이디값처럼 사용할 property 설정부분   
-->
     <property name = 'src.dir' value = '${basedir}\src'/>
     <property name = 'lib.dir' value = '${basedir}\lib'/>
     <property name = 'class.dir' value = '${basedir}\classes'/>
     <property name = 'doc.dir' value = '${basedir}\lib'/>
     <property name = 'doc_header' value = 'Jakarta Ant Test Project'/>
     <property name = 'doc_title' value = '${doc_header}'/>
     <property name = 'doc_footer' value = '테스트 앤트'/>

     <target name ='clear' description = '프로젝트의 도큐먼트, 클래스파일을 삭제한다'>
                <delete dir = '${doc.dir}' />
                 <delete dir = '${class.dir}'/>
     </target>

     <target name = 'allmake' depends = 'makedoc, compile, makejar' description = '프로젝트의 도큐먼트, 클래스파일, 압축파일을 생성한다'>
     </target>

     <target name = 'makedoc' description = '프로젝트의 도큐먼트를 작성한다'>
                <javadoc
                encoding = 'EUC-KR'
                sourcepath = '${src.dir}'
                destdir = '${doc.dir}'
                author = 'true' version = 'true' private = 'true' use = 'true'
                windowstitle = '${doc_title}'
                doctitle = '${doc_title}'
                header = '${doc_header}'
                footer = '${doc_footer}'>
                </javadoc>
     </target>

     <target name = 'compile' description = 'init'>
                <echo message="Compile Start !! --- ${TODAY}" />
             <javac srcdir = '${src.dir}' fork="yes" memoryMaximumSize="256m" destdir = '${class.dir}'>
              <classpath>
                <pathelement location='${lib.dir}/antlr-2.7.5H3.jar' />
                <pathelement location='${lib.dir}/spring.jar' />
                <pathelement location='${lib.dir}/tools.jar' />
                <pathelement location='${lib.dir}/servlet.jar' />
                <pathelement location='${lib.dir}/cglib-nodep-2.1.jar' />
                <pathelement location='${lib.dir}/classes12.jar' />
                <pathelement location='${lib.dir}/commons-beanutils.jar' />
                <pathelement location='${lib.dir}/commons-collections-3.2.jar' />
                <pathelement location='${lib.dir}/commons-dbcp-1.2.1.jar' />
                <pathelement location='${lib.dir}/commons-digester-1.8.jar' />
                <pathelement location='${lib.dir}/commons-fileupload-1.1.1.jar' />
                <pathelement location='${lib.dir}/commons-io-1.3.jar' />
                <pathelement location='${lib.dir}/commons-lang-2.2.jar' />
                <pathelement location='${lib.dir}/commons-logging.jar' />
                <pathelement location='${lib.dir}/commons-pool.jar' />
                <pathelement location='${lib.dir}/commons-validator-1.3.1.jar' />
                <pathelement location='${lib.dir}/dom4j-1.4.jar' />
                <pathelement location='${lib.dir}/hibernate3.jar' />
                <pathelement location='${lib.dir}/jstl.jar' />
                <pathelement location='${lib.dir}/jta.jar' />
                <pathelement location='${lib.dir}/k2.jar' />
                <pathelement location='${lib.dir}/log4j-1.2.9.jar' />
                <pathelement location='${lib.dir}/mysql-connector-java-2.0.14-bin.jar' />
                <pathelement location='${lib.dir}/ojdbc14.zip' />
                <pathelement location='${lib.dir}/sitemesh-2.2.1.jar' />
                <pathelement location='${lib.dir}/spring-modules-validation.jar' />
                <pathelement location='${lib.dir}/standard.jar' />
                <pathelement location='C:\Program Files\Apache Software Foundation\Tomcat 5.5\common\lib\servlet-api.jar' />
                <pathelement location='C:\Program Files\Apache Software Foundation\Tomcat 5.5\common\lib\jsp-api.jar' />
              </classpath>
             </javac>
     </target>

     <target name = 'makejar' depends = 'compile' description = '프로젝트 압축파일을 만든다'>
                <jar jarfile='${lib.dir}/ant_test.jar' basedir = '${class.dir}'/>
    </target>
</project>



④       Ant로 컴파일 및 Jar파일 만들기, 도큐먼트 만들기

A.        커맨드 상에서 build.xml 파일이 위치한 경로로 이동
C:\ant_project\common\compile

B.        컴파일 하기
ant compile 이라고 실행

C.       Jar 파일 만들기
ant makejar 라고 실행

D.        Doc 생성하기
ant makedoc

E.        한꺼번에 다하기
ant allmake
※ 위 내용은, 여러 자료를 참고하거나 제가 주관적으로 정리한 것입니다.
   잘못된 정보나 보완이 필요한 부분을, 댓글 또는 메일로 보내주시면 많은 도움이 되겠습니다.
07 14, 2009 15:48 07 14, 2009 15:48


Trackback URL : http://develop.sunshiny.co.kr/trackback/247

Leave a comment

« Previous : 1 : ... 462 : 463 : 464 : 465 : 466 : 467 : 468 : 469 : 470 : ... 648 : Next »

Recent Posts

  1. HDFS - Python Encoding 오류 처리
  2. HP - Vertica ROS Container 관련 오류...
  3. HDFS - Hive 실행시 System Time 오류
  4. HP - Vertica 사용자 쿼리 이력 테이블...
  5. Client에서 HDFS 환경의 데이터 처리시...

Recent Comments

  1. 안녕하세요^^ 배그핵
  2. 안녕하세요^^ 도움이 되셨다니, 저... sunshiny
  3. 정말 큰 도움이 되었습니다.. 감사합... 사랑은
  4. 네, 안녕하세요. 댓글 남겨 주셔서... sunshiny
  5. 감사합니다 많은 도움 되었습니다!ㅎㅎ 프리시퀸스

Recent Trackbacks

  1. amazon fire television amazon fire television %M
  2. how to broadcast your own tv station how to broadcast your own tv station %M
  3. elapsed time clock for operating r... elapsed time clock for operating r... %M
  4. Mysql - mysql 설치후 Character set... 멀고 가까움이 다르기 때문 %M

Calendar

«   12 2019   »
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        

Bookmarks

  1. 위키피디아
  2. MysqlKorea
  3. 오라클 클럽
  4. API - Java
  5. Apache Hadoop API
  6. Apache Software Foundation
  7. HDFS 생태계 솔루션
  8. DNSBL - Spam Database Lookup
  9. Ready System
  10. Solaris Freeware
  11. Linux-Site
  12. 윈디하나의 솔라나라

Site Stats

TOTAL 2780506 HIT
TODAY 89 HIT
YESTERDAY 1360 HIT