• 카산드라 -2부 : ant 사용하기

    2018. 9. 16. 19:01

    by. 위지원

    사전 준비

    • 아파치 앤트 빌드 툴 : http://ant.apache.org/
    • JUnit Jar : 좋은 경로를 아직 못구했다. jar파일마다 다 깨져있어 엉엉 ㅠ.ㅠ

    아래와 같이 폴더를 구성한다.


    [weejw@com ~]$ tree hpcbuild/
    hpcbuild/
    ├── lib
    └── src
        ├── java
        └── test

    4 directories, 0 files


    카산드라의 라이브러리와 다운받은 JUnit 라이브러리를 위에서 생성한 lib폴더안에 복사한다.


    [weejw@com lib]$ ls
    HdrHistogram-2.1.9.jar                              jctools-core-1.2.1.jar
    ST4-4.0.8.jar                                       jflex-1.6.0.jar
    airline-0.6.jar                                     jna-4.2.2.jar
    antlr-runtime-3.5.2.jar                             joda-time-2.4.jar
    apache-cassandra-3.11.3.jar                         json-simple-1.1.jar
    apache-cassandra-thrift-3.11.3.jar                  jstackjunit-0.0.1.jar
    asm-5.0.4.jar                                       junit-4.10.jar
    <..생략>


    이제 Ant 빌드툴에서 사용할 build.xml을 작성한다.


    먼저 가장 위에 필요한 곳의 경로를 설정해준다.


    <project name="hpcas" default="dist" basedir=".">
      <property name="src"              location="src/java"/>
      <property name="build"           location="build"/>
      <property name="build.classes"  location="build/classes"/>
      <property name="dist"             location="dist"/>
      <property name="lib"              location="lib"/>
    </project>


    빌드를 위한 경로를 아래와 같이 설정해준다.


    <path id="hpcas.classpath">
        <pathelement location="${build.classes}"/>
        <fileset dir="${lib}" includes="*jar"/>
      </path>


    target은 한 단위의 작업을 수행한다.

    난중에 ant init , ant run등 과같이 명령어처럼 사용한다고 생각하면 된다.


      <target name="init">
        <mkdir dir="${build}"/>
        <mkdir dir="${build.classes}"/>
      </target>

      <target name="compile" depends="init">
        <javac srcdir="${src}" destdir="${build.classes}" includeantruntime="false">
          <classpath refid="hpcas.classpath"/>
        </javac>
      </target>

      <target name="dist" depends="compile">
        <mkdir dir="${dist}/lib"/>
        <jar jarfile="${dist}/lib/hpcas.jar" basedir="${build.classes}"/>
      </target>

     <target name="run" depends="dist">
       <java classname="${classToRun}">
         <classpath refid="hpcas.classpath"/>
       </java>
     </target>

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


    그리고서 src/java 아래에 다음과같이 간단하게 코드를 하나 작성해주자.


    public class A{
      public static void main(String[] args){
        System.out.println("yo cassandra");
      }
    }


    그리고서 아래와 같이 실행 시켜주면 결과를 확인 할 수 있다.


    [weejw@com hpcbuild]$ ant -DclassToRun=A run
    Buildfile: /home/weejw/hpcbuild/build.xml

    init:
        [mkdir] Created dir: /home/weejw/hpcbuild/build
        [mkdir] Created dir: /home/weejw/hpcbuild/build/classes

    compile:
        [javac] Compiling 1 source file to /home/weejw/hpcbuild/build/classes

    dist:
        [mkdir] Created dir: /home/weejw/hpcbuild/dist/lib
          [jar] Building jar: /home/weejw/hpcbuild/dist/lib/hpcas.jar

    run:
         [java] yo cassandra

    BUILD SUCCESSFUL
    Total time: 2 seconds


    만약에 junit을 이용해서 test하기 위해선 아래와같은 내용만 추가해주면 된다.

    1) test를 위한 경로를 잡아준다.

    2) 초기화부분에 test용 폴더를 만들어준다.

    3) junit에 대한 설정을 해준다.


      <property name="test.src"   location="src/test"/>
      <property name="test.build" location="build/test"/>


    <...생략>

     <path id="hpcas.test.classpath">
        <pathelement location="${test.build}"/>
        <fileset refid="hpcas.classpath"/>
      </path>

      <target name="init">
        <mkdir dir="${build}"/>
        <mkdir dir="${build.classes}"/>
        <mkdir dir="${test.build}"/>
      </target>


     <target name="compile-test" depends="init">
        <javac srcdir="${test.src}" destdir="${test.build}">
          <classpath refid="hpcas.test.classpath"/>
        </javac>
      </target>

      <target name="test" depends="compile-test,compile">
        <junit printsummary="yes" showoutput="ture">
          <batchest>
            <fileset dir="${test.build" includes="**/Test*.class"/>
          </batchest>
        </junit>
      </target>