본문 바로가기
PROGRAM/JAVA / JSP

ant : build.xml 파일 작성 방법

by ojava 2015. 9. 16.
반응형

ant로 빌드할 때 꼭 필요한 필수파일!

빌드에 대한 내용을 넣어주는 build.xml 파일 작성 방법을 알아보자.

 

먼저 상세한 작성방법을 알아보기 전에 가장 간단한 예제를 써보고

추가옵션을 써서 확장시키며 응용하면 될 듯 함미당~

 

 

 

build.xml

 

<?xml version="1.0"?>

 

<project name="common" basedir="." default="compile">

<property file="build.properties />

 

<path id="classpath">

<fileset dir="${lib.dir}" includes="*.jar" />

</path>

 

<target name="clean" description="Clean output directories">

<delete dir="${build.dir}" />

</target>

<target name="compile" description="Compile main source tree java files">

<mkdir dir="${classes.dir}" />

<javac destdir="${build.dir}" debug="true" optimize="false"

deprecation="false" failonerror="true" encoding="UTF-8"

classpathref="classpath" includeantruntime="true" verbose="true">

<src path="${src.dir}" />

</javac>

<copy todir="${classes.dir}" verbose="true">

<fileset dir="${src.dir}" includes="**/*.xml" />

</copy>

</target>

 

</project>

 

 

 

property 내용을 파일로 지정해두었기 때문에 build.properties 파일을 따로 씁니다.

내용이 많지 않아서 build.xml에 포함시켜도 되지만 분리해두었습니다.

 

 

build.properties

 

#Directories Infomation

src.dir=src

lib.dir=/blog/ojava/webapp/WEB-INF/lib

build.dir=build

classes.dir="${build.dir}/classes

 

 

 

 

property 내용을 파일로 분리하지 않고 build.xml 에 담을 경우에는 다음과 같이 변경하면됩니다.

 

<property name="src.dir" value="src" />
<property name="lib.dir" value="/blog/ojava/webapp/WEB-INF/lib" />
<property name="build.dir" value="build" />
<property name="classes.dir" value="${build.dir}/classes" />

 

 

 

빌드 파일을 보면 아시다시피 xml 파일로 쓰여지며, 하나의 project와 하나 이상의 target으로 구성됩니다.

target은 업무단위라고 볼 수 있는데, 세부 내용으로 다양한 task (더 작은 일 단위) 가 들어갈 수 있으며

각각의 업무가 수행되기 위한 선행업무 (target) 도 지정할 수 있습니다.

 

이 과정에 필요한 변수를 property로 선언하고 있으며 그 내용은 위에 작성한 것처럼

파일로 분리할 수도 있고, 각각 property로 하나씩 선언도 가능합니다.

 

하나씩 살펴봅시당

 

 

 

project

 

build file에 반드시 들어가는 필수단위로, 단 하나만 존재할 수 있음.

 

 속성값

설명 

필수여부 

 name

 프로젝트 이름. eclipse 내의 ant view에서는 해당 이름으로 표시되어서 각각의 빌드 파일을 구분할 수 있음

 필수 아님

 default

 target 지정이 되지 않은 경우 기본으로 수행되는 target 값

 필수는 아니지만, Ant 1.6.0 버전 이후에 모든 프로젝트는 최상위 작업이나 유형을 포함하는 target을 정의하도록 하고있음. 이 target이 project 초기화의 일부로 수행됨.

 basedir

 모든 경로를 계산하기 위한 기본 경로.

property에서 basedir 속성 설정하면 오버라이드 되지만, 없는 경우 project의 basedir 속성을 참조하게 됨.

상대경로는 빌드파일이 들어있는 폴더를 기준으로 결정.

 필수 아님

 

 

 

target

 

빌드에 필요한 단계별 과정에 해당되는 단위. 각 과정은 상세한 수행내역을 가지고 있다.

각 과정은 다른 과정과의 의존성을 가지고 있어서 이 의존성에 의거하여 수행순서가 정해진다.

이 의존성을 나타내는 속성이 depends 이다. 예시를 보자.

 

<target name="A"/>
<target name="B" depends="A"/>
<target name="C" depends="B"/>
<target name="D" depends="C,B,A"/>

 

 

target D를 실행시킨다고 가정했을 경우에, 의존성 관계에 따라 C가 먼저 수행된다.

(depends 대상이 여러개인 경우, 왼쪽에서 오른쪽 순서로 수행됨)

C가 실행되려면 B가 먼저 선행되어야 하고, B를 실행하기 위해서는 A가 선행되어야 한다.

target D에서 선언한 depends의 C, B, A가 아니라 각 target의 선행단계가 우선적으로 수행되므로

결국 A -> B -> C -> D 의 순서로 target이 실행되어진다.

 

수행 순서를 결정하기 위한 다양한 attribute가 있지만 depends를 많이 쓰는 듯 하네용.

 

 

 

task

 

task는 target에 속하는 더 작은 일의 단위입니다. (project > target > task)

task가 될 수 있는 것은 다양하게 있는데, 위의 예시에서 사용하는 내용을 인용하자면

clean 업무를 하고자 하는 경우 delete를 사용해서 기존의 classes 파일을 지우도록 상세 업무를 주고

compile을 할 때는 지웠던 classes 폴더를 다시 만들어 준 후에, javac를 이용하여 compile을

수행하고 있습니다.

 

다양한 task가 있는데, 쓸만한 목록을 간단하게 소개하고 넘어가도록 하겠습니당.

 

 

 task 명령어

 설명

 copy

 복사를 위한 명령어. fileset 설정을 통해 복사할 대상 선택 가능.

 delete

 삭제를 위한 명령어. 역시 fileset 설정을 통해 삭제 대상 선택 가능.

 javac

 java compile 명령어

 javadoc

 javadoc을 사용한 API 문서 생성

 mkdir

 신규 폴더 생성

 jar (또는 tar, zip)

 jar 또는 tar, zip을 통한 압축파일 생성

 

 

 

예시에서 보다시피 다른 task 명령어들은 직관적인 동작만 수행하고 있으므로

fileset 사용법만 안다면 쉽게 사용이 가능한데 javac 의 경우에는 attribute가 많으므로

별도로 설명하는 시간을 가져보겠슴다.

 

 

+) javac

 

java source tree를 compile 하는 명령어로, 주요 속성은 다음과 같습니다.

 

 

 속성명

설명 

 필수 여부

 srcdir

 java 파일이 위치한 경로를 지정.

 필수! 해당 값이 없는 경우에는 src element를 별도로 추가해야 합니다.

 destdir

 컴파일 된 class 파일이 위치할 경로

 필수 아님

 encoding

 소스 파일의 인코딩 설정

 필수 아님

 debug

 컴파일 시 디버그 정보를 보여줄 것인지 설정하는 것으로, 기본값은 off.

 필수 아님

 optimize

 컴파일 시 소스 최적화 여부 설정. 기본값은 off. JDK 1.3 이후로는 해당 플래그가 필요없음. (컴파일 시 최적화가 필요없으므로)

 필수 아님 (JDK 1.3 이후로는 의미없음)

 deprecation

 JDK 버전 업 등의 이유로 사용 중단된 소스 코드(deprecation)를 컴파일 할 것인지를 물어보는 것.

기본값은 off. 

 필수 아님

 verbose

 컴파일 시 상세한 진행상황을 보여줄 것인지를 설정함. 기본값은 no

 필수 아님

 includeAntRuntime

 classpath에 ant의 runtime 라이브러리를 포함시킬 것인지를 확인. build.sysclasspath가 설정되어있지 않으면 기본값이 yes임.

apache ant 메뉴얼에서는 false 설정을 권장함.

 필수 아님

 failonerror

 빌드에 실패하는 경우 컴파일 에러를 표시할 것인지 묻는 것으로 기본값은 true.

 필수 아님

 

 

 

 

 

사실은... build.xml 파일은 하나 만들어두면 다른 곳에 응용하기 좋아서

블로그에 써두고 여기저기 쓸 요량으로 적었는데 정리하다보니까

공부가 많이 되는 듯 합니당. 더 상세한 내용은 apache ant 사용자 매뉴얼을 확인하세요~

 

http://ant.apache.org/manual/index.html

 

 

반응형