Ant xml파일 사용 방법을 알아봅시다.

Posted on 2010. 8. 6. 16:35
Filed Under IT/java

오늘은 Ant 사용법에 관해 간단하게 설명드릴께요.

제가 첨부한 파일 보시면 누구라도 아실수 있으시겠지만 간단하게나마 부연 설명을 한번...귀찮지만...
아마도 이 글 안 읽으시고 첨부파일만 보심 다 아실듯하네요.

buildw.xml

common.properties


참 그리고 아파치에서 제공하는 ant매뉴얼 입니다. 저는 영어가 약해서 안 읽어봤지만ㅎㅎ
http://ant.apache.org/manual/
더 자세한 정보가 필요하시면 참조하세요.

첨부 파일은 제가 회사에서 사용하려고 만든 파일인데 프로젝트명 등만 살짝 바꿨습니다.

그럼... 설명드리죠. 먼저 첨부파일이 두개가 있습니다.
buildw.xml은 ant 스크립트명령이 들어가 있는 파일이구요
common.properties는 프로젝트명이랑 폴더경로, 그리고 서명파일을 생성할때 사용할 정보들이 들어있습니다.

common.properties에 설정한 인자들은 변수처럼 buildw.xml에 대응됩니다.
buildw.xml파일에 common.properties를 사용한다고 선언하는 부분이 아래 부분입니다.

<property file="common.properties" />

ant의 동작방법이 리눅스에서 사용하는 makefile이랑 비슷한 면이 있는데요. 바로 종속적으로 동작한다는 점이죠. 아래코드처럼 정의 되있을때 target name이 init인 속성은 depends로 clean을 필요로 하고 있습니다.
<target name="clean" description="Clean...">
    <delete dir="${dir.dist}" />
    <delete dir="${dir.src}/res" />
    <delete dir="${dir.classes}/res" />
</target>

<target name="init" depends="clean" description="init..">
    <mkdir dir="${dir.dist}" />
    <path id="compile.classpath">
        <fileset dir="${dir.lib}" includes="*.jar" />
    </path>
</target>
 
이렇게 정의를 한 다음 사용자가 이클립스에서 init을 실행하면 먼저 init의 depends인 clean을 실행해서 폴더를 지운다음 init을 실행하게 됩니다. 만약 clean에도 depends가 있다면 clean의 depends가 먼저 실행되겠지요.

정리를 해서 설명할만큼 거창한 내용은 없는거 같으니까 xml을 보면서 위에서부터 나오는 명령어들을 설명드릴께요.

delete는 파일이나 폴더 삭제에 사용되구요.
아래 예제에서 dir을 fileset으로 바꾼다면 특정 파일만 삭제할 수도 있겠죠?
<delete dir="${dir.dist}" />


mkdir은 말그대로 dir속성에 정의된 폴더를 생성합니다.
<mkdir dir="${dir.dist}" />


path는 저도 이게 뭔가 한참봤네요.ㅋㅋ
path는 id에 정의된 이름으로 path목록을 지정한다고 보면될거같네요. 밑에 있는 javac부분에서 classpathref부분에 "compile.classpath"가 지정된 것을 볼수 있습니다.
<path id="compile.classpath">
    <fileset dir="${dir.lib}" includes="**/*.jar" />
</path>


첨부해서 말씀드리자면 이클립스에서 compile.classpath에 마우스를 올려보면 path에 정의된 파일들 목록을 볼 수 있는데요~
제가 첨부한 파일에는 path의 fileset의 includes가 "**/*.jar"가 아니고 그냥 "*.jar"일텐데요.
includes에 "**/filename"을 사용하면 폴더의 하위폴더까지 포함하라는 얘기가 됩니다.
한마디로 lib폴더에 하위 폴더가 있고 그 폴더의 jar파일까지 path에 포함시키려면
include="**/*.jar"를 정의하면된단 말이죠.

javac는 컴파일해서 class파일을 만들라는 거구요. ant에선 소스코드에 오류가 있던지 말던지 컴파일 되는 한도까지 class파일을 만들어줍니다. 소스코드가 잘못되면 이클립스는 알려주지만 ant는 그런 오류메시지를 신경쓰진 않는다는 말이죠. 오류가 있는 코드더라도 일단 컴파일하고 ant의 다음 단계를 계속 실행해줍니다.
<javac srcdir="${dir.src}" 
	destdir="${dir.classes}"
	debug="${javac.debug}"
	classpathref="compile.classpath" />

copy는 fileset에 선언된 파일들을 todir폴더에 복사하는 명령입니다~
fileset의 exclude는 당연히 fileset에 포함시키지 않는다는 말이구요. 밑에 사용된 코드는 확장자가 db인 파일은 복사하지 않겠다는 말입니다. 너무 당연하네요...
<copy todir="${dir.classes}/res/">
	<fileset dir="${dir.res}/">
		<include name="**/*.*" />
		<exclude name="**/*.db" />
	</fileset>
</copy>

exec...는 외부파일을 실행시키는 명령입니다.
exec에다가 dir로 폴더위치 지정하고 executable에 실행할 파일이름을 써주면 됩니다.
os는 구동 os버전이구요.
밑에서 사용된 keytool.exe는 다들 아시다시피 java에서 서명파일을 생성해주는 실행파일입니다. 요렇게 옵션을 주시면 서명파일이 자동으로 만들어지죠. ant를 쓰기전엔 cmd장에서 배치파일로 실행해서 만들었었는데 cmd창에서 따로 만들지 않아도 되니 귀찮은 과정하나가 ant를 사용해서 또 줄었네요.

<exec dir="." executable="keytool"> <arg value="-genkey" /> <arg value="-alias" /> <arg value="${alias}" /> <arg value="-keystore" /> <arg value="${keystore}" /> <arg value="-keypass" /> <arg value="${keypass}" /> <arg value="-dname" /> <arg value="${dname}" /> <arg value="-storepass" /> <arg value="${storepass}" /> </exec>


마지막으로 signjar입니다. 위에서 만든 서명파일을 이용해서 jar파일에 서명을 해주는 역할을 합니다.
이렇게하면 "프로젝트명.jar"파일 하나만 서명을 하겠죠? 만약 다른 jar파일을 같이 서명할려면 fileset을 이용하거나 서명할 파일이 몇개 안된다면 밑의 라인을 ctrl+c, ctrl+v해서 몇줄 더 넣으시고 파일명부분만 바꿔주셔도 되겠죠.
<signjar jar="${dir.dist}/${projectName}.jar"
	keystore="${keystore}"
	alias="${alias}"
	storepass="${storepass}"
	keypass="${keypass}" />

ant가 예제 구하기가 좀 힘들지만 한번 보면 누구나 쉽게 이해할 수 있는 구조입니다. 가끔 이클립스가 멍청하게 class파일을 생성하지 못하거나 서명된 jar파일 만드실때 사용하세요~.

'IT > java' 카테고리의 다른 글

이클립스 색상 설정하기  (0) 2011.05.18
이클립스-ant 사용하기  (2) 2009.08.15

About

by 쏜다

Notice

Counter

· Total
:
· Today
:
· Yesterday
: