Skip to content

Build.xml

Apache Ant의 기본 빌드 파일명.

기본 구조 분석

project

<?xml version="1.0" encoding="euc-kr"?>
<project name="plc_gateway" default="dist" basedir="." xmlns:artifact="antlib:org.apache.maven.artifact.ant">
    ...
</project>
name 속성
프로젝트의 이름을 지정합니다.
위 예제에서는 프로젝트 이름이 "plc_gateway"로 설정되어 있습니다.
default 속성
실행할 기본 target을 지정합니다.
Ant는 별도의 target을 명시하지 않을 경우 default에 지정된 target을 실행합니다.
예제에서는 "dist" target이 기본으로 실행되도록 설정되었습니다.
basedir 속성
프로젝트의 기준 디렉토리를 설정합니다.
현재 예제에서는 "."로 설정되어 있어, 현재 디렉토리가 기준 디렉토리가 됩니다.
xmlns:artifact 속성
Ant 빌드 파일에 Maven Ant Tasks를 사용하기 위한 네임스페이스 정의입니다.
antlib:org.apache.maven.artifact.ant는 Maven Artifact 기능(예: 의존성 다운로드, 설치)을 지원하는 Ant 라이브러리를 나타냅니다.
이를 통해 Maven의 의존성 관리 기능을 Ant 스크립트에서 활용할 수 있습니다.

property

    <property file="build.properties"/>
    <property name="base.dir" value="."/>
    <property name="dist.dir" value="dist"/>
    <property name="build.dir" value="build"/>
    <property name="src.dir" value="src"/>
    <property name="jar.file" value="mseo_plc_gateway_${version}.jar"/>
    <property name="dist.file" value="mseo_plc_gateway_${version}.zip"/>

변수로 사용할 수 있는 속성들을 정의한다. 이후 name attribute 에 정의한 변수명을 ${jar.file} 형식으로 사용 가능.

taskdef

    <taskdef name="ssh" classname="com.sshtools.ant.Ssh">
        <classpath>
            <pathelement location="maverick-ant.jar"/>
        </classpath>
    </taskdef>

위의 <taskdef> 태그는 Apache Ant에서 사용자 정의 태스크를 정의하기 위한 설정입니다.

참고로 maverick-ant.jar 는 ANT 에서 SFTP, SSH 를 사용하기 위해 필요한 라이브러리 이다. 이는 보통 라이브러리를 sftp로 업로드하기 위해 사용된다.

path

    <path id="maven-ant-tasks.classpath" path="${base.dir}/maven-ant-tasks-2.1.3.jar"/>

typedef

    <typedef resource="org/apache/maven/artifact/ant/antlib.xml"
             uri="antlib:org.apache.maven.artifact.ant"
             classpathref="maven-ant-tasks.classpath"/>

artifact

    <artifact:pom id="pom" file="pom.xml"/>
    <artifact:dependencies filesetId="pom.fileset" pathId="pom.classpath"
                           pomRefId="pom"/>

target

    <target name="import-dependency" description="copy dependency jar file to lib">
        <copy todir="target/dependency">
            <fileset refid="pom.fileset"/>
            <mapper type="flatten"/>
        </copy>
    </target>
    <target name="prepare" depends="import-dependency">
        <tstamp>
            <format property="DSTAMP" pattern="yyyy.mm.dd"/>
            <format property="TSTAMP" pattern="HH:mm"/>
        </tstamp>
        <echo message="Build Start!! ======> ${DSTAMP}-${TSTAMP}"/>
    </target>
    <target name="clean" depends="prepare">
        <delete dir="${dist.dir}"/>
        <delete dir="${build.dir}"/>
    </target>
    <target name="compile" depends="clean">
        <mkdir dir="${build.dir}"/>
        <javac deprecation="off" srcdir="${src.dir}" destdir="${build.dir}"
               listfiles="no" failonerror="true" encoding="utf-8" debug="on"
               debuglevel="lines,vars,source">
            <classpath>
                <pathelement path="${base.dir}/lib"/>
                <fileset dir="${base.dir}/lib">
                    <include name="*.jar"/>
                </fileset>
            </classpath>
            <classpath refid="pom.classpath"/>
        </javac>
    </target>
    <target name="mkjar" depends="compile">
        <mkdir dir="${dist.dir}"/>
        <jar destfile="${dist.dir}/lib/${jar.file}" basedir="${build.dir}"/>
    </target>
    <target name="dist" depends="mkjar">
        <copy todir="${dist.dir}/lib">
            <fileset dir="lib"/>
        </copy>
        <copy todir="${dist.dir}/lib">
            <fileset dir="target/dependency"/>
        </copy>
        <copy todir="${dist.dir}/cfg">
            <fileset dir="cfg"/>
        </copy>
        <copy todir="${dist.dir}/bin">
            <fileset dir="resource"/>
        </copy>
    </target>

build.properties

Apache Ant를 사용하는 빌드 스크립트에서 외부 변수와 값을 정의하는 데 사용되는 파일입니다.

이 파일을 사용하면 빌드 스크립트의 변수 값을 중앙에서 설정하고 관리할 수 있습니다.

일반적으로 build.properties 파일에는 다음과 같은 정보가 포함될 수 있습니다:

<?xml version="1.0" encoding="euc-kr"?>
<project name="plc_gateway" default="dist" basedir="."
         xmlns:artifact="antlib:org.apache.maven.artifact.ant">
    <property file="build.properties"/>
    <property name="base.dir" value="."/>
    <property name="dist.dir" value="dist"/>
    <property name="build.dir" value="build"/>
    <property name="src.dir" value="src"/>
    <property name="jar.file" value="mseo_plc_gateway_${version}.jar"/>
    <property name="dist.file" value="mseo_plc_gateway_${version}.zip"/>

    <path id="maven-ant-tasks.classpath" path="${base.dir}/maven-ant-tasks-2.1.3.jar"/>

    ...

일반적으로 .gitignore 파일에 추가한다.

로컬의 특정 JAR 파일을 종속성에 추가

<project name="MyProject" default="compile">
    <property name="lib.dir" location="lib"/>

    <target name="compile">
        <javac srcdir="src" destdir="build/classes">
            <classpath>
                <pathelement path="${lib.dir}/mseo-common_1.0.0.jar"/>
            </classpath>
        </javac>
    </target>
</project>

See also

Favorite site