상세 컨텐츠

본문 제목

ant, eclipse jar 만들기

IT 세상/자바세상

by 이현민 (지후지율아빠) 2010. 5. 29. 00:23

본문

UTILITY update:  ---------------------------------------------------------------------------------------------------

JAR 파일 개요
 ** Java Archive의 약자로 자바 어플리케이션 프로그램을 개발후 하나의 파일로 묶어서 실행하게 해준다
    jar로 묶어서 배포하게 되면 경로나 파일의 위치에 상관없이 프로그램의 실행이 가능하다
    jar 파일 포맷은 대중적인 zip 파일 포맷을 근간으로 하여 많은 파일들을 하나로 모으는데 사용된다
    zip 파일과는 달리 jar 파일은 압축과 디스트리뷰션 뿐만 아니라 라이브러리, 컴포넌트, 플러그인 등의 전개와 캡슐화에도
    사용되며 컴파일러나 JVM 같은 툴이 직접 사용하기도 한다
 
 Help
  -c  새 아카이브를 만듭니다.
  -t  아카이브에 대한 목차를 나열합니다.
  -x  아카이브에서 명명된 (또는 모든) 파일을 추출합니다.
  -u  기존의 아카이브를 업데이트합니다.
  -v  표준 출력에 대한 자세한 정보 출력을 생성합니다.
  -f  아카이브 파일 이름을 지정합니다.
  -m  지정된 증명 파일에서 증명 정보를 포함시킵니다.
  -0  저장만 수행하며 ZIP 압축을 사용하지 않습니다.
  -M  입력 항목에 대한 증명 파일을 만들지 않습니다.
  -i  지정된 jar 파일에 대한 색인 정보를 생성합니다.
  -C  지정된 디렉토리로 변경하고 다음 파일을 포함시킵니다.

  개별 파일에서 JAR 파일 만들기:   jar cf [jar-file] [input-file...]
  디렉토리에서 JAR 파일 만들기:   jar cf [jar-file] [dir-name]
  압축 풀린 JAR 파일 만들기:   jar cf0 [jar-file] [dir-name]
  JAR 파일 업데이트:    jar uf [jar-file] [input-file...]
  JAR 파일 내용보기:    jar tf [jar-file]
  JAR 파일 내용 추출하기:    jar xf [jar-file]
  JAR 파일에서 특정 파일 추출하기:  jar xf [jar-file] [archived-file...]
  실행 JAR 파일로 패키지된 애플리케이션 실행하기: java -jar [app.jar]

 Eclipse에서 jar 파일 만들기
  file -> export -> java -> jar file 선택

 Ant로 jar 파일 만들기
  ** Java 기반의 build 도구로 형식은 XML이고 플랫폼 독립적인 Java 클래스를 사용한다
     Eclipse는 Ant 플러그인을 기본으로 내장하고 있기 때문에 별도로 다운로드 할 필요가 없다
     package Explorer에서 build.xml을 선택하고 오른쪽 버튼-> Run As -> Ant Build를 실행하면 된다

  ANT의 주요 기능
   자바 소스 파일 컴파일
   jar, war, ear, zip 파일의 생성
   avadoc을 실행하여 도움말 생성
   파일이나 폴더의 이동 및 복사, 삭제
   각각의 작업에 대한 의존성 설정
   유닉스에서처럼 파일이나 폴더에 퍼미션 설정
   파일의 변경 날짜를 설정하는 touch 기능
   외부 프로그램의 실행
   플랫폼에 무관한 XML을 이용 (build.xml : Configuration파일)

  설치 및 설정
   Ant 빌드 파일을 작성하기 위해 아파치 프로젝트 사이트(http://ant.apache.org/)에서 Ant를 다운로드하여
   적당한 곳에 압축을 풀고 패스를 잡아주고 사용하면 된다
   Ant는 자바 based이기 때문에 JDK가 설치 되어 있어야 한다(jdk1.4.x 이상 권장)
   설치한 폴더가 C:\ant162\ 일 경우 아래 그럼에서 처럼 디렉토리와 파일들이 생성된다
   /bin : Ant 실행을 위한 배치 파일이 있다(유닉스나 리눅스의 경우 셸 파일 사용)
   /lib : jar 파일들
   /docs: 매뉴얼과 API 문서가 있다
   /etc : ant 환경 설정과 관련된 xsl 파일들이 있다.
   압축을 풀고 디렉토리를 구성을 확인 했으면 환경설정이 필요하다(jdk는 필히 설치 해야 한다)
   환경변수 ANT_HOME = C:\ant162
   패스     PATH = %ANT_HOME%\bin
   명령프롬프트 상에서 c:\> ant -h (또는 -help)로 확인한다
 
  기본 사용 방법
   1. project 정의
    가장 먼저 할 일은 project를 정의한다
    <?xml version="1.0"?>
    <project name="example" default="compile" basedir=".">
    Ant 빌드 파일은 하나의 프로젝트를 정의한다 <project>요소의 이름은 example로 지정하였고
    default 속성 값은 compile로 하였는데 이는 명령행에서 매개변수 없이 ant를 입력했을 때
    기본적으로 컴파일을 수행함을 뜻한다(나중에 타겟으로 compile을 만들어 줄 것이다)
    basedir은 . 으로 했는데, 이는 이 빌드 파일에서 사용되는 다른 모든 경로는 build.xml 파일이
    들어있는 디렉터리를 기준으로 한 상대경로라는 것을 의미한다
    project는 다수의 property를 가질 수 있다
 
   2. 각종 property 정의
    디렉터리 구조를 정의하는 프로퍼티(property)를 정의하여 Ant에 프로젝트 디렉터리 구조를 알려준다
    <property name="build.dir" location="build"/>
    <property name="build.prod.dir" location="${build.dir}/prod"/>
    <property name="src.dir" location="src"/>
    <property name="lib.dir" location="lib"/>
    의미를 살펴보면 <property> 요소의 location 속성값(baesdir을 기준으로 한 상대 경로)과
    name 속성값을 연결한 것인데 ${build.dir}의 경우 프로퍼티의 이름을 변수처럼 사용하여
    다른 디렉터리를 참조하여 사용할 수 있다
    <property file="build.properties"/> 명령은 build.properties 파일을 참조할 수 있게 해준다

   3. 자바클래스 path 정의
           <path id="project.classpath">
     <pathelement location="${build.prod.dir}" />
     <fileset dir="${lib.dir}">
      <include name="*.jar" />
     </fileset>
    </path>
    path 요소는 project.classpath라는 경로를 생성한다 이 경로는 나중에 컴파일시에 사용된다
    pathelement 요소에서는 빌드 디렉터리를 클래스 경로에 추가해서 자바 컴파일러가 모든 클래스 파일을
    찾을 수 있게 한다
    fileset 요소에서는 .jar 파일들을 클래스 경로에 추가하여 우리가 작성한 클래스 파일에서 사용되는
    라이브러리(여기에서는 example.jar와 같은)를 찾을 수 있도록 한다
    여기에서도 ${}를 이용하여 디렉터리 경로에 참조를 이용한다
    이렇게 하면 빌드 실행시마다 컴퓨터에 CLASSPATH 환경변수를 설정할 필요가 없으며 필요할 대마다
    fileset 요소만 수정하면 된다
    이는 완전한(Complete) 빌드를 유지하기 쉽게 한다

   4. target 정의
    <target name="prepare">
     <mkdir dir="${build.prod.dir}" />
    </target>
    <target name="compile" depends="prepare">
     <javac srcdir="${src.dir}" destdir="${build.prod.dir}">
      <classpath refid="project.classpath" />
     </javac>
    </target>
    타겟(target)은 빌드 단계로서 지정한 순서에 따라 실행될 일련의 '태스크(task)'들을 정의하는 단계이다
    prepare는 빌드 출력 디렉터리를 만들기 위하여 <mkdir> 태스크를 사용한다
    compile은 소스 파일을 컴파일 하고 prepare에서 생성된 디렉터리에 결과 클래스 파일들을 저장한다
    depends의 의미는 그 Target이 실행되기 전에 depends에 있는 Target이 먼저 실행되어야 한다는 의미다
    타겟의 실행 순서는 중요하므로 depends 속성을 통해 타겟 간의 의존성을 만들어 순서를 지정한다
    의존성은 여러 개를 지정할 수 있으며, 타겟 이름을 콤마(,)로 구분하여 나열한다
    prepare 실행이 완료되면 javac 태스크를 실행하여 자바 컴파일러를 호출한다
    컴파일러는 srcdir 속성의 값에 명시된 소스 폴더내의 자바 소스 파일들을 모두 컴파일 하고
    그에 상응하는 클래스 파일들을 destdir이 가리키는 디렉터리에 생성한다
    classpath 요소는 project.classpath가 가리키는 클래스 패스를 사용하라고 알려주는 역할을 한다
    즉 <target name="all" depends="clean, compile" description="Clean build and dist, then compile"/>의
    "all" target은 "clean" target을 수행한 후에 "compile" target을 수행하게 된다
 
  예제
   1. build.xml
    <?xml version="1.0"?>
    <!--
         name :      프로젝트 이름
         default:    초기치로 설정되는 작업, 아무 것도 지정하지 않고 실행하면 이 작업을 수행
         basedir:    프로젝트에 대한 기준 폴더를 지정
         property:   프로젝트에서 사용할 각 폴더들의 위치를 지정
         ${basedir}: 이미 앞에서 설정된 값을 읽어온다
    -->
    <project name="HelloAnt" default="javadoc" basedir="." >
     <property name="src.dir" value="${basedir}/src" />
     <property name="classes.dir" value="${basedir}/classes" />
     <property name="jar.dir" value="${basedir}/jar" />
     <property name="javadoc.dir" value="${basedir}/doc" />
     <!--
          target:  각각의 타겟을 지정, 타겟이란 프로젝트를 이루는 하나 하나의 작업 단위
          srcdir:  컴파일 하기 위한 자바 소스 파일의 위치를 지정
          destdir: 어느 폴더에 클래스 파일들을 위치 시킬지 지정
     -->
     <target name="compile" >
      <javac srcdir="${src.dir}" destdir="${classes.dir}" />
     </target>
     <!-- jar 파일을 만든다
          depends:  compile 정상적으로 수행되어야만 진행
          jarfile:  jar 파일의 위치와 파일 이름 지정
          basedir:  jar로 묶을 클래스 파일의 위치
          includes: 모든 폴더에서 클래스 파일들만 포함
     -->
     <target name="jar" depends="compile">
      <jar jarfile="${jar.dir}/hello.jar"
           basedir="${classes.dir}"
           includes="**/*.class" />
     </target>
     <!-- javadoc을 실행
          depends:     compile과 jar 수행이 정상적으로 끝나야만 실행
          sourcepath:  소스 폴더 지정
          sourcefiles: 소스 파일 지정
          windowtitle: 제목 지정
          destdir:     파일 생성후 저장할 폴더 지정
     -->
     <target name="javadoc" depends="compile, jar" >
      <javadoc sourcepath="${src.dir}"
        sourcefiles="${src.dir}/HelloAnt.java"
        windowtitle="HelloAnt API"
        destdir="${javadoc.dir}" />
     </target>
     <!-- 소스 코드를 제외한 모든 작업 파일들과 폴더를 삭제한다 -->
     <target name="clean" >
      <delete dir="${classes.dir}/classes/*" />
      <delete dir="${jar.dir}/jar/*" />
      <delete dir="${javadoc.dir}/doc/*" />
     </target>
    </project>
 
   2. build2.xml
    <?xml version="1.0"?>
    <!-- 제일 처음에는 comment을 쓰지 않는다 -->
    <!DOCTYPE project>
    <!-- 프로젝트 이름 수정 -->
    <project name="web" default="dist" basedir=".">
      <!-- 각각의 폴더를 수정
      <property name="src" value="src" />
      <property name="build" value="build" />
      <property name="dist" value="dist" />
      <property name="lib.dir" value="c:\inetpub\wwwroot\web-inf\lib" />
      -->
     <property name="classes.dir" value="c:\inetpub\wwwroot\web-inf\classes" />
       <!-- 디렉토리 생성
      <target name="init">
       <tstamp/>
       (datamp: yyyyMMdd, tstamp: hhmm, today:  MMMddyyy 날짜, 시간을 출력)
       <mkdir dir="${build}"/>
      </target>
      -->
      <!-- 컴파일
      <target name="compile" depends="init">
       <javac srcdir="${src}" destdir="${build}" />
      </target>
      -->
      <!-- jar 아카이브 생성
      <target name="dist" depends="compile">
       <mkdir dir="${dist}/lib"/>
       <jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar" basedir="${build}" />
       (jar 파일 이름 변경)
      </target>
      -->
     <!-- *.jar를 지정하면 에러 발생한다 직접 복사할 파일 이름을 지정 한다 -->
     <target name="dist">
     <copy file="./WEB-INF/classes/Execute.class" todir="${classes.dir}" />
      <!-- 
      <copy todir="${classes.dir}">
       <fileset dir="c:\jbuilder\rmi\classes\rmi\" includes="*.class" />
       (*.class 파일을 복사한다)
       <fileset dir="c:\jbuilder\rmi\classes\rmi\" exclude="*.gif" />
       (*.gif를 제외한 모든 파일을 복사한다)
        <fileset dir="c:\jbuilder\rmi\classes\rmi\" />
       (폴더에 있는 파일들을 확장자 bak를 붙여서 복사한다)
       <mapper type="glob" from="*" to="*.bak" />
      </copy>
      -->
    </target>
      <!-- Clean
      <target name="clean">
       <delete file="${build}/ant.jar"/>
       <delete dir="${build}"/>
       <delete dir="${dist}"/>
      </target>
      -->
    </project> 
 
   3. build3.xml
    <?xml version="1.0"?>
    <!DOCTYPE project>
    <project name="webjar" default="dist" basedir=".">
     <property name="root.dir" value="c:\eclipse\workspace1.4\webjar" />
     <property name="lib.dir" value="c:\inetpub\wwwroot\web-inf\lib"/>
     <target name="dist">
      <!--  basedir에 있는 파일을 jarfile로 묶는다 -->
      <jar jarfile="${root.dir}/web.jar" basedir="${root.dir}/bin" />
       <!--
       <jar destfile="${root.dir}/web.jar" basedir="${root.dir}/bin" />
       <zip destfile="${root.dir}/web.zip" basedir="${root.dir}/bin" />
       -->
      <!-- *.jar를 지정하면 에러 발생한다 직접 복사할 파일 이름을 지정 한다 -->
      <copy file="${root.dir}/web.jar" todir="${lib.dir}" />
     </target>
    </project>

Javadoc 문서 만들기
 project -> generate javadoc이나 file -> export -> java -> javadoc에서 만든다
 javadoc.exe의 위치(C:\Program Files\Java\jdk1.5.0_22\bin\javadoc.exe)를 지정한다

반응형

'IT 세상 > 자바세상' 카테고리의 다른 글

아파치 한글파일 다운로드  (0) 2010.06.15
url 에서 파일 다운로드 jsp  (0) 2010.06.15
jsp filedown 소스  (0) 2010.05.27
tag 내용(,구분자) 20개 제한 및 /score 뺴기  (0) 2010.04.01
MD5  (1) 2010.03.22

관련글 더보기