Microsoft 社는 2022년 6월 15일 Internet Explorer 11의 지원을 종료했습니다.

예제로 살펴보는 build.xml

제목

예제로 살펴보는 build.xml

1. online 에서 구할 수 있는 예제

Graha 라이브러리의 build.xml 파일Java 실행기 프로그램의 build.xml 파일 은 java 파일을 컴파일 하고, 여러 형태(jar, war, tar, zip) 로 패키징 하고, Java 프로그램을 실행한다.

2. Graha 라이브러리의 build.xml 파일에 대한 설명

2.1. Graha 라이브러리의 기본적인 디렉토리 구조

  • src : Java 소스코드
  • bin : Java class 파일(Apache Ant로 Java 소스코드를 컴파일 하여, 이 디렉토리에 class 파일을 생성한다)
  • package : jar 로 패키징된 파일(Apache Ant로 src, bin 디렉토리의 파일들을 jar 로 압축한다)
  • /opt/java/lib/ : 컴파일에 필요한 라이브러리가 위치한 디렉토리

2.2. Java 소스파일을 컴파일하는 방법

ant compile
  • 파일명이 지정되지 않았으므로, 기본값인 build.xml 파일을 읽는다(파일명을 지정하기 위해서는 "-f build.xml" 과 같은 옵션을 추가한다).
  • name 속성이 compile 인 <target> 을 찾아, 그 안에 기술된 Ant Task 를 실행한다.

compile 옵션을 생략한 경우, <project> 의 default 속성값을 이용하므로, 결과는 같다.

2.3. build.xml 설명

2.3.1. <property> 요소

처음 2줄의 <property> 요소는 다음과 같다.

<property name = "base.dir" value = "."/>
<property name = "src.dir" value = "${base.dir}/src"/>

2번째 줄은 <property> 를 정의하는 예제이기도 하지만, 사용하는 예제이기도 하다.

<property> 는 중복을 줄이기 위해서 사용되지만, build.xml 파일의 구조화 혹은 가독성을 높이기 위해 사용되기도 한다.

2.3.2. <presetdef> 요소

<presetdef name="javac">
<javac includeantruntime="false" />
</presetdef>

<presetdef> 요소는 새로운 Ant Task 를 정의하기 위해 사용되지만, 위와 같이 <javac> Task를 다시 정의하는 방식도 가능하다.

2.3.3. <path> 요소

<java><javac> Task 에서 classpath 에 공급될 것을 정의하기 위해 사용된다.

<path id = "master-classpath">
<!--
<fileset dir = "${base.dir}/lib">
<include name = "*.jar"/>
</fileset>
-->
<pathelement path = "${build.dir}"/>
</path>

여기서 정의된 것은 다음과 같이 참조된다.

<classpath refid = "master-classpath"/>

<path> 요소는 1개의 jar 파일이나 경로를 공급하는 <pathelement> 를 가질 수 있지만, 주석으로 막힌 부분과 같이 디렉토리 아래의 모든 jar 파일을 공급하는 식의 <fileset> 을 하위요소로 가질 수 있다.

jar 파일을 <pathelement> 로 1개씩 나열하는 대신, <fileset> 으로 lib 디렉토리 아래의 모든 jar 파일을 참조하게 한 후에, 의존하는 jar 파일을 lib 디렉토리에 복사하는 방법이 더 일반적이다. 후자의 경우 build.xml 파일을 변경할 일이 줄어들지만, 의존성있는 jar 라이브러리를 엄격하게 관리하는데 방해가 되기도 한다.

2.3.4. 디렉토리는 만들거나(<mkdir>) 삭제하는(<delete>) Task

다음은 컴파일을 하기 전에 class 파일이 위치하게 될 디렉토리를 만드는 작업을 수행한다.

<target name="depends">
<mkdir dir="${build.dir}" />
<mkdir dir="${tomcat10.dir}" />
</target>

다음은 class 파일이 위치하는 디렉토리를 지워버리는 작업을 수행한다.

<target name="clean">
<delete verbose="true" dir="${build.dir}" />
</target>

verbose 속성은 삭제한 파일목록을 표시한다.

2.3.5. 소스코드를 컴파일하는(<javac>) Task

다음은 소스코드를 컴파일하는(<javac>) Task의 예제이다.

<target name="compile" depends="depends">
<javac
destdir = "${build.dir}"
deprecation="true"
debug="true"
debuglevel="lines,vars,source"
includeAntRuntime="false"
optimize="true"
nowarn="off"
target="1.7"
source="1.7"
>
<src path = "${src.dir}"/>
<classpath refid = "master-classpath"/>
</javac>
</target>

<javac> Task 의 destdir 속성과 <src>, <classpath> 요소를 제외한 나머지 것들은 필수적이지 않지만, 관행적으로 많이 사용되는 것들이다.

2.3.6. <target> 요소의 depends 속성에 대해서

<target> 요소의 depends 속성을 사용하면, 먼저 실행되어야 하는 다른 <target> 요소를 지정할 수 있다.

war 파일을 패키징 하기 전에, jar 파일을 패키징하고, 그 전에 컴파일 하고, 그 전에 bin 디렉토리를 만드는 식이다

2.3.7. 패키징(<jar>) Task

다음은 jar로 패키징하는 예제이다.

<target name="package" depends="compile">
<jar destfile="${package.dir}/${app.name}.${app.version}.jar">
<fileset dir="${build.dir}" includes="kr/**/*.class"/>
<fileset dir="${base.dir}" includes="README.md,LICENSE"/>
<fileset dir="${src.dir}" includes="kr/**/*.java, kr/**/*.xsl, kr/**/*.xml, kr/**/*.properties"/>
</jar>
</target>

2.3.8. 다른 패키징(<war>, <tar>, <zip>) Task

이 예제는 Java 실행기 프로그램의 build.xml 파일 에서 찾을 수 있다.

2.3.9. Java 프로그램을 실행하는(<java>) Task

"kr.graha.util.Converter" 를 실행시키는 예제이다.

<target name="generate-tomcat10" depends="compile">
<java classname="kr.graha.util.Converter" fork="true">
<arg value="${base.dir}" />
<classpath refid = "master-classpath"/>
</java>
</target>

"kr.graha.util.Converter" 는 Apache Tomcat 10 을 위해서 import 구문을 변경시키는 유틸리티이며, Graha ~ Graha 응용프로그램과 import 구문을 작성하는 규칙이 동일한 경우에만 사용할 수 있다.

제목

첨부파일