본문 바로가기
DEV

Ant로 jar파일 만들기

by 땅콩둘기 2021. 3. 12.
반응형
Java 기반의 build 도구로 형식은 XML이고 플랫폼 독립적인 Java 클래스를 사용한다. Eclipse는 Ant 플러그인을 기본으로 내장하고 있기 때문에 별도로 다운로드 할 필요가 없다. Eclipse에서 실행시 package Explorer에서 build.xml을 선택하고 오른쪽 버튼-> Run As -> Ant Build를 실행하면 된다.
<?xml version="1.0" encoding="euc-kr" ?>

<!--
#######################project 정의################################
-->
<project name="example" default="compile" basedir=".">
<!--
####################property 정의: 속성값 설정#########################
	         name :      프로젝트 이름
	         default:    초기치로 설정되는 작업, 아무 것도 지정하지 않고 실행하면 이 작업을 수행 
	         basedir:    프로젝트에 대한 기준 폴더를 지정
	         property:   프로젝트에서 사용할 각 폴더들의 위치를 지정
	         ${basedir}: 이미 앞에서 설정된 값을 읽어온다
	         file: 일치하는 파일에서 설정값을 읽어온다
                 path: 아래 설명 참조
###########################################################################
-->
		<property file="ant_build.properties"/>
		<path id="path-lib">
			<fileset dir="WebContent/WEB-INF/lib" includes="**/*.jar"/>
			<fileset dir="lib_build" includes="**/*.jar"/>
		</path>
<!--
	####################init 타겟 : 초기설정을 한다.#######################
		          target:  각각의 타겟을 지정, 타겟이란 프로젝트를 이루는 하나 하나의 작업 단위 
		          delete :  지정한 폴더를 삭제
		          mkdir: 지정한 위치에 디렉토리를 만든다.
###########################################################################
-->
	 <target name="built-init" depends="">
	        <echo>build-init</echo>
	   		<delete dir="${dir.class}"/>
	    	<mkdir dir="${dir.src}"/>
	    	<mkdir dir="${dir.class}"/>
	    	<mkdir dir="${dir.jar}"/>
	    </target>
<!--
####################compile 타겟 :java파일을 컴파일한다. #######################
	          target:  각각의 타겟을 지정, 타겟이란 프로젝트를 이루는 하나 하나의 작업 단위 
	          srcdir:  컴파일 하기 위한 자바 소스 파일의 위치를 지정
	          destdir: 어느 폴더에 클래스 파일들을 위치 시킬지 지정
###########################################################################
-->
	<target name="compile" depends="built-init">
	  	<echo>compile-java</echo>
	   	<javac srcdir="${dir.src}" destdir="${dir.class}" classpathref="path-lib" encoding="UTF-8" source="1.6" target="1.6" debug="false" includeantruntime="false"/>
	</target>
<!--
#################copy : jar파일로 생성할 java, xml을 copy한다. ##################
			          copy: 복사할 위치 지정 
			          fileset: includes에 지정한 파일들을 복사한다.
###########################################################################
-->
	<target name="copy-resource" depends="compile">
			<echo>copy-resource</echo>
				<copy todir="${dir.class}">
				<fileset dir="${dir.src}" includes="**/*.java"></fileset>
				<fileset dir="${dir.resource}" includes="**/*.xml"></fileset>
					</copy>	
	    </target>
<!--
################jar 타겟 :클래스 파일들을 jar로 묶는다.#########################
	          depends:  compile 정상적으로 수행되어야만 진행 (depends="compile")
	          jarfile:  jar 파일의 위치와 파일 이름 지정
	          basedir:  jar로 묶을 클래스 파일의 위치
	          includes: 모든 폴더에서 클래스 파일들만 포함 
###########################################################################
-->
	<target name="make-jar" depends="copy-resource">
	        <echo>make-jar</echo>

	    	<jar destfile="${dir.jar}\${package.jar.name}" basedir="${dir.class}" >
	    		<manifest>
	    			<attribute name="Create-Date" value="${date.yymmddhhmmss}"/>
	    			<attribute name="Package Name" value="${package.app.name}"/>
	    			<attribute name="Package Version" value="${package.app.version}"/>
	    		</manifest>
	    	</jar>
	    </target>

<!--
########clean 타겟 :소스 코드를 제외한 모든 작업 파일들과 폴더를 삭제한다########
-->
		<target name="clean" depends="make-jar">
		 	<echo>clean</echo>
			<delete dir="${dir.class}"/>
		</target>

	</project>

 

  • PATH

path 요소는 project.classpath라는 경로를 생성한다 경로는 나중에 컴파일시에 사용된다. pathelement 요소에서는 빌드 디렉터리를 클래스 경로에 추가해서 자바 컴파일러가 모든 클래스 파일을 찾을 있게 한다.
fileset
요소에서는 .jar 파일들을 클래스 경로에 추가하여 우리가 작성한 클래스 파일에서 사용되는 라이브러리(여기에서는 example.jar 같은) 찾을 있도록 한다. 여기에서도 ${} 이용하여 디렉터리 경로에 참조를 이용한다.
이렇게 하면 빌드 실행시마다 컴퓨터에 CLASSPATH 환경변수를 설정할 필요가 없으며 필요할 대마다 fileset 요소만 수정하면 된다.

 

  • TARGET

타겟(target) 빌드 단계로서 지정한 순서에 따라 실행될 일련의 '태스크(task)'들을 정의하는 단계이다. prepare 빌드 출력 디렉터리를 만들기 위하여 <mkdir> 태스크를 사용한다. compile 소스 파일을 컴파일 하고 prepare에서 생성된 디렉터리에 결과 클래스 파일들을 저장한다. depends 의미는 Target 실행되기 전에 depends 있는 Target 먼저 실행되어야 한다는 의미다. 타겟의 실행 순서는 중요하므로 depends 속성을 통해 타겟 간의 의존성을 만들어 순서를 지정한다. 의존성은 여러 개를 지정할 있으며, 타겟 이름을 콤마(,) 구분하여 나열한다. prepare 실행이 완료되면 javac 태스크를 실행하여 자바 컴파일러를 호출한다. 컴파일러는 srcdir 속성의 값에 명시된 소스 폴더내의 자바 소스 파일들을 모두 컴파일 하고 그에 상응하는 클래스 파일들을 destdir 가리키는 디렉터리에 생성한다.

 

 

반응형

댓글