Eclipse와 ant 사용하기(예제)

이종철 0 6,567 2006.05.23 23:00
Eclipse와 ant 사용하기(예제)
 
 
Eclipse와 ant 사용하기(예제)

--------------------------------------------------------------------
1.        먼저 이클립스에서 자바 프로젝트(전 test라는 이름을 사용했습니다.)를 하나 생성하고 다음과 같이 HelloWorld.java 파일을 하나 만듭니다.(test package 아래)
--------------------------------------------------------------------

package test;

public class HelloWorld {

        /**
        * @param args
        */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
            System.out.println("HelloWorld!!");
        }
}


--------------------------------------------------------------------
2.        이클립스에서 Ant 사용자 설정을 변경하려면 메뉴바의 Widows  Preference를 선택하여 Preference 다이얼로그를 Open 합니다. 이클립스는 Ant로 빌드 할 때 기본적으로 build.xml을 단순 XML이 아닌 ant 빌드 파일로 인식합니다.
(이 부분은 간단히 읽어 주세요)
--------------------------------------------------------------------
Preference를 선택했을 때 나타나는 다이얼로그 창에서 좌측의 ant를 선택하면 기본적으로 Names에 build.xml로 되어 있는데 “,” 단위로 빌드 파일을 입력해 두면 build.xml이 뿐 아니라 입력한 XML 파일에 대해서도 빌드 파일로 추가하는 것이 가능 합니다.


-------------------------------------------------------------
3.        ant 빌드 파일 작성하기 전 단계
-------------------------------------------------------------
빌드 파일을 작성하기 전에 빌드를 설계해야 합니다. 빌드 파일 역시 프로그래밍의 연속이므로 구체적으로 빌드를 어디에 사용하고 어떤식으로 진행할지를 결정해야 한다는 것입니다.

이 예제는 단순하여 build.xml만 두고 진행하겠지만 실제 프로젝트에서는 복잡해 질 수 있으므로 properties(build.properties) 파일을 별도로 두고 build.xml도 여러 개로 나누어 분산시키는 방법을 사용하기도 합니다.

이번 예제에서는 다음과 같이 빌드를 진행할 것입니다.

-        배포 기능
Clean : 컴파일 디렉토리에 클래스가 존재하면 지운다.
Compile : 소스를 컴파일, 이때 클래스 패스를 명시
Mkjar : 컴파일된 클래스를 jar로 묶는다.
Dist : 배포에 필요한 디렉토리 및 파일을 zip 파일로 묶는다

-        실행 기능
Run : HelloWorld Application을 실행

-------------------------------------------------
4.        빌드 파일 작성 하기
-------------------------------------------------


이클립스 프로젝트에서 마우스 우측버튼을 눌러 New  File을 선택하여 build.xml 파일을 작성 합니다.

우선 빌드 파일을 위에서 정의한 필요한 타켓으로 분리하여 기본 골격을 작성 합니다..

아래에서 depends의 의미는 그 Target이 실행되기 전에 depends에 있는 Target이 먼저 실행되어야 한다는 의미를 지닙니다.

<?xml version="1.0" encoding="euc-kr"?>
<project name="test" default="dist">
        <target name="clean">
        </target>
        <target name="compile" depends="clean">
        </target>
        <target name="mkjar" depends="compile">
        </target>
        <target name="dist" depends="mkjar">
        </target>
        <target name="run">
        </target>
</project>


------------------------------------------------------------------
5.        이번에는 실제 하나씩 만들어 봅니다.(프로퍼티 지정 단계)
------------------------------------------------------------------


빌드시에 사용할 프로퍼티를 지정하는 단계인데 properties 파일을 별도로 두어 관리할 수도 있는데 본 예제에서는 Version을 properties 파일로 빼냈습니다. (build.xml에서 property를 지정할 수도 있습니다.)

다음과 같이 build.properties 파일을 작성 합니다.

[build.properties]
version=1.0


[build.xml의 윕부분에 다음과 같이 property를 추가 합니다.]

아래는 build.xml의 현재까지 내용 입니다.

<?xml version="1.0" encoding="euc-kr"?>
<project name="test" default="dist">
        <!-- 프로퍼티를 지정 합니다. -->
        <property file="build.properties"/>
        <property name="base.dir"  value="."/>
        <property name="dist.dir"  value="dist"/>
        <property name="build.dir" value="build"/>
        <property name="src.dir"  value="src"/>
        <property name="jar.file"  value="${version}_helloworld.jar"/>
        <property name="dist.file"  value="${version}_helloworld.zip"/>
        <target name="clean">
        </target>
        <target name="compile" depends="clean">
                </target>
        <target name="mkjar" depends="compile">
        </target>
        <target name="dist" depends="mkjar">
        </target>
        <target name="run">
        </target>
</project>


-----------------------------------------------------------
6.        build.xml을 추가로 작성 합니다.
-----------------------------------------------------------


-        최초 빌드시 시간을 출력하기 위한 부분을 추가 합니다.

Target의 맨 윗부분에 prepare Target을 추가 합니다.

<target name="prepare">
                    <tstamp>
                                <format property="DSTAMP" pattern="yyyy.mm.dd"/>
                                <format property="TSTAMP" pattern="HH:mm"/>
                    </tstamp>
                    <echo message="Build Start!! ======> ${DSTAMP}-${TSTAMP}"/>
        </target>

-        Clean Target을 완성 합니다.

먼저 만들어진 클래스가 있을지 몰라 삭제 합니다.

<target name="clean" depends="prepare">
                <delete dir="${dist.dir}"/>
                <delete dir="${build.dir}"/>
        </target>

-        Compile Target을 완성 합니다.

소스를 컴파일 하며 클래스패스 및 소스 디렉토리를 지정하고 <javac> 태그를 이용하여 컴파일 합니다.

<!-- 소스 컴파일 -->
        <target name="compile" depends="clean">
            <mkdir dir="${build.dir}"/>
                <javac deprecation="off" srcdir="${src.dir}" destdir="${build.dir}" listfiles="no" failonerror="true" >
                  <classpath>
                          <pathelement path="${base.dir}/lib" />
                          <fileset dir="${base.dir}/lib">
                                  <include name="*.jar" />
                          </fileset>
                  </classpath>       
                </javac>
        </target>
-        Mkjar Target을 완성 합니다.

<!-- 빌드 디렉토리에 컴파일이 끝난 클래스를 jar 파일로 묶음 -->
        <target name="mkjar" depends="compile">
                <mkdir dir="${dist.dir}"/>
                <jar destfile="${dist.dir}/${jar.file}"
                    basedir="${build.dir}" />               
                 
        </target>


-        Dist Target을 완성 합니다.

        <!-- 배포할 라이브러리와 소스등을 배포용 디렉토리로 복사하고 배포용 디렉토리를 zip으로 묶음 -->
        <!-- jar와 소스, lib 아래의 jar를 배포용 디렉토리에 복사 후 zip으로 묶음 -->
        <target name="dist" depends="mkjar">
                <copy todir="${dist.dir}/lib">
                    <fileset dir="lib" />
                </copy>
                <copy todir="${dist.dir}/src">
                    <fileset dir="src" />
                </copy>
                <zip destfile="${DSTAMP}_${dist.file}">
                        <fileset dir="${dist}/.."/>
                </zip>               
        </target>\

-        run Target을 완성 합니다.

<!-- HelloWorld 클래스를 호출하여 실행 -->
        <!-- <java> 태스크에 실행 파일을 입력하고 클래스 패스를 지정 -->
        <target name="run">
                <java classname="test.HelloWorld">
                <classpath>
                          <pathelement location="${dist.dir}/${jar.file}" />
                    <pathelement path="${base.dir}/lib" />
                          <fileset dir="${base.dir}/lib">
                                  <include name="*.jar" />
                          </fileset>
                  </classpath>       
                </java>
        </target>

--------------------------------------------------------
7.        아래는 완성된 build.xml 파일 입니다.
--------------------------------------------------------

<?xml version="1.0" encoding="euc-kr"?>
<project name="test" default="dist">
        <!-- 프로퍼티를 지정 합니다. -->
        <property file="build.properties"/>
        <property name="base.dir"  value="."/>
        <property name="dist.dir"  value="dist"/>
        <property name="build.dir" value="build"/>
        <property name="src.dir"  value="src"/>
        <property name="jar.file"  value="${version}_helloworld.jar"/>
        <property name="dist.file"  value="${version}_helloworld.zip"/>
       
        <!-- 빌드 초기 단계에 날짜 및 시간을 출력 -->
        <target name="prepare">
                    <tstamp>
                                <format property="DSTAMP" pattern="yyyy.mm.dd"/>
                                <format property="TSTAMP" pattern="HH:mm"/>
                    </tstamp>
                    <echo message="Build Start!! ======> ${DSTAMP}-${TSTAMP}"/>
        </target>
       
        <!-- 이미 있는 배포 파일 및 데렉토리를 삭제 -->
        <target name="clean" depends="prepare">
                <delete dir="${dist.dir}"/>
                <delete dir="${build.dir}"/>
        </target>
       
        <!-- 소스 컴파일 -->
        <target name="compile" depends="clean">
            <mkdir dir="${build.dir}"/>
                <javac deprecation="off" srcdir="${src.dir}" destdir="${build.dir}" listfiles="no" failonerror="true" >
                  <classpath>
                          <pathelement path="${base.dir}/lib" />
                          <fileset dir="${base.dir}/lib">
                                  <include name="*.jar" />
                          </fileset>
                  </classpath>       
                </javac>
        </target>
       
        <!-- 빌드 디렉토리에 컴파일이 끝난 클래스를 jar 파일로 묶음 -->       
        <target name="mkjar" depends="compile">
                <mkdir dir="${dist.dir}"/>
                <jar destfile="${dist.dir}/${jar.file}"
                    basedir="${build.dir}" />                                 
        </target>
       
        <!-- 배포할 라이브러리와 소스등을 배포용 디렉토리로 복사하고 배포용 디렉토리를 zip으로 묶음 -->
        <!-- jar와 소스, lib 아래의 jar를 배포용 디렉토리에 복사 후 zip으로 묶음 -->
        <target name="dist" depends="mkjar">
                <copy todir="${dist.dir}/lib">
                    <fileset dir="lib" />
                </copy>
                <copy todir="${dist.dir}/src">
                    <fileset dir="src" />
                </copy>
                <zip destfile="${DSTAMP}_${dist.file}">
                        <fileset dir="${dist}/.."/>
                </zip>               
        </target>
       
        <!-- HelloWorld 클래스를 호출하여 실행 -->
        <!-- <java> 태스크에 실행 파일을 입력하고 클래스 패스를 지정 -->
        <target name="run">
                <java classname="test.HelloWorld">
                <classpath>
                          <pathelement location="${dist.dir}/${jar.file}" />
                    <pathelement path="${base.dir}/lib" />
                          <fileset dir="${base.dir}/lib">
                                  <include name="*.jar" />
                          </fileset>
                  </classpath>       
                </java>
        </target>
</project>

------------------------------------------
8.        ant로 빌드 하기
------------------------------------------

좌측의 Package Explorer에서 build.xml을 선택 후 마우스 우측 버튼을 눌러 “Run as2. Ant Build”를 선택하면 빌드 설정 다이얼로그 창이 나타나는데 Targets 탭을 선택하면 테이블에 타겟이 나열되는데 체크 박스에서 빌드할 타겟을 선택합니다.(build.xml을 선택 후 마우스 우측 버튼을 눌러 “Run as1. ant Build(Alt+Shift+X)”를 선택하면 즉시 빌드 됩니다.)

기본적으로 project의 default에 해당된 타겟이 표시 되어 있습니다.

ant로 빌드시 인자를 주기 위해서는 Main Tab에서 Parameter를 설정하면 되구요….

배포본을 만들고 애플리케이션을 테스트 하기 위해 dist와 run을 지정하고 Run 버튼을 클릭 합니다.

빌드 결과는 다음과 같습니다.

(혹시 빌드 중 javac를 못찾아서 오류가 생기면 JAVA_HOME이 없어서 그러하므로 환경 변수에서 JAVA_HOME을 설정해 주세요, lib 폴더가 없다고 오류가 나면 project 폴더아래에 lib 폴더를 만들어 주시면 됩니다.)

Buildfile: C:\1.myproject\SK(폰빌)\project\test\build.xml
prepare:
    [echo] Build Start!! ======> 2005.19.30-22:19
clean:
  [delete] Deleting directory C:\1.myproject\SK(폰빌)\project\test\dist
  [delete] Deleting directory C:\1.myproject\SK(폰빌)\project\test\build
compile:
    [mkdir] Created dir: C:\1.myproject\SK(폰빌)\project\test\build
    [javac] Compiling 1 source file to C:\1.myproject\SK(폰빌)\project\test\build
mkjar:
    [mkdir] Created dir: C:\1.myproject\SK(폰빌)\project\test\dist
      [jar] Building jar: C:\1.myproject\SK(폰빌)\project\test\dist\1.0_helloworld.jar
dist:
    [copy] Copied 1 empty directory to 1 empty directory under C:\1.myproject\SK(폰빌)\project\test\dist\lib
    [copy] Copying 1 file to C:\1.myproject\SK(폰빌)\project\test\dist\src
      [zip] Building zip: C:\1.myproject\SK(폰빌)\project\test\2005.19.30_1.0_helloworld.zip
run:
    [java] HelloWorld!!
BUILD SUCCESSFUL
Total time: 5 seconds
 
 

Comments