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="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
'PROGRAM > JAVA / JSP' 카테고리의 다른 글
[자바 웹 개발 워크북] 웹 프로그래밍 기초 (0) | 2016.02.04 |
---|---|
[자바 웹 개발 워크북] 웹 애플리케이션 환경의 실행과 개발 (0) | 2016.02.03 |
java.net.SocketException : Broken pipe (0) | 2015.09.16 |
final과 static의 다양한 사용 방법 (2) | 2012.04.13 |
EL에 대해서 알아봅시당! (0) | 2011.03.21 |