Spring

[JAVA] ant build 작성 방법 다양한 예제

IT-PAPA 2023. 12. 8. 14:34
728x90
반응형

Ant는 자바 기반 프로젝트를 빌드하고 관리하기 위한 자동화 도구입니다. Apache Ant는 XML 기반의 빌드 스크립트를 사용하여 프로젝트의 컴파일, 테스트, 패키징 등과 같은 작업을 수행할 수 있습니다. 이러한 빌드 작업은 사용자가 정의한 빌드 파일에 명시되며, 각 작업은 목적에 따라 태스크로 구성됩니다.

핵심 개념:

  1. 빌드 파일 (Build File):
    • Ant로 작성된 빌드는 XML 파일입니다. 일반적으로 build.xml이라는 이름을 가지며, 프로젝트의 빌드 프로세스를 정의합니다.
  2. 프로젝트 (Project):
    • 빌드 파일에 정의된 모든 작업들은 하나의 프로젝트로 묶입니다. 프로젝트는 빌드의 최상위 요소로 간주되며, 모든 작업은 이를 기준으로 실행됩니다.
  3. 태스크 (Task):
    • Ant 빌드 파일에서 각 작업은 태스크로 표현됩니다. 예를 들어, 컴파일, 복사, JAR 생성 등이 태스크에 해당합니다.
  4. 속성 (Property):
    • 빌드 파일에서 사용되는 변수를 나타냅니다. 속성을 사용하여 파일 경로, 버전 번호 등을 설정할 수 있습니다.
  5. 의존성 (Dependency):
    • 빌드 작업 간에 의존성을 정의하여 특정 작업이 다른 작업 이후에 실행되도록 할 수 있습니다.
요소 설명 예시
<project> 빌드 파일의 최상위 요소로, 전체 빌드 프로젝트를 정의합니다. <project name="MyProject" default="compile" basedir=".">
<property> 속성을 정의하며, 키-값 쌍을 사용하여 빌드 스크립트 내에서 사용할 변수를 설정합니다. <property name="src.dir" value="src"/>
<target> 특정 빌드 작업을 정의합니다. name 속성은 작업의 이름을 나타내며, depends 속성은 의존성을 설정합니다. <target name="compile" depends="init">
<mkdir> 디렉토리를 생성하는 작업을 정의합니다. <mkdir dir="${build.dir}"/>
<javac> Java 소스 코드를 컴파일하는 작업을 정의합니다. <javac srcdir="${src.dir}" destdir="${build.dir}" includeantruntime="false"/>
<java> Java 애플리케이션을 실행하는 작업을 정의합니다. <java classname="${main.class}" classpath="${build.dir}:${classpath}">
<copy> 파일 또는 디렉토리를 복사하는 작업을 정의합니다. <copy todir="${dest.dir}"><fileset dir="${src.dir}" includes="**/*.txt"/></copy>
<propertyfile> 속성 파일을 생성 또는 수정하는 작업을 정의합니다. <propertyfile file="${output.dir}/${config.file}"><entry key="database.url" value="jdbc:mysql://localhost:3306/mydb"/></propertyfile>
<zip> 파일이나 디렉토리를 압축하는 작업을 정의합니다. <zip destfile="${zip.file}" basedir="${src.dir}"><include name="**/*.txt"/></zip>
<jar> JAR 파일을 생성하는 작업을 정의합니다. <jar destfile="${jar.file}" basedir="${build.dir}"><manifest><attribute name="Main-Class" value="${main.class}"/></manifest></jar>
<manifest> JAR 파일의 매니페스트 정보를 정의합니다. <manifest><attribute name="Main-Class" value="${main.class}"/></manifest>
<delete> 파일이나 디렉토리를 삭제하는 작업을 정의합니다. <delete dir="${build.dir}"/>
변수 설명 예시
src.dir 소스 코드 디렉토리 경로 "src"
build.dir 빌드 디렉토리 경로 "build"
jar.file 생성될 JAR 파일 이름 "output.jar"
main.class 메인 클래스의 패키지 및 이름 "com.example.MainClass"
lib.dir 외부 라이브러리 디렉토리 경로 "lib"
class.path 클래스패스를 정의하는 경로 <fileset dir="${lib.dir}" includes="*.jar"/>
output.dir 출력 디렉토리 경로 "output"
config.file 생성될 속성 파일 이름 "config.properties"
zip.file 생성될 압축 파일 이름 "output.zip"
test.dir 테스트 소스 코드 디렉토리 경로 "test"
junit.jar JUnit 라이브러리 경로 "path/to/junit.jar"
fileset.include 파일을 포함할 조건을 정의하는 문자열 "**/*.txt"
manifest JAR 파일 매니페스트 설정 <manifest><attribute name="Main-Class" value="${main.class}"/></manifest>
copy.include 복사 작업에서 포함할 파일을 정의하는 문자열 "**/*.txt"
property.key 속성 파일에서 사용할 키 값 "database.url"
property.value 속성 파일에서 사용할 값 "jdbc:mysql://localhost:3306/mydb"
zip.include 압축 작업에서 포함할 파일을 정의하는 문자열 "**/*.txt"
delete.file 삭제 작업에서 대상 파일을 정의하는 경로 "${output.dir}/${config.file}"
delete.dir 삭제 작업에서 대상 디렉토리를 정의하는 경로 "${build.dir}"
delete.zip 삭제 작업에서 대상 압축 파일을 정의하는 경로 "${zip.file}"

기본 작성 방법

<!-- 빌드 파일의 최상위 요소는 프로젝트를 정의합니다. -->
<project name="MyProject" default="compile" basedir="." xmlns:artifact="antlib:org.apache.maven.artifact.ant">

    <!-- 속성 정의 -->
    <property name="src.dir" value="src"/>
    <property name="build.dir" value="build"/>
    <property name="lib.dir" value="lib"/>

    <!-- 클래스패스 설정 -->
    <path id="classpath">
        <fileset dir="${lib.dir}" includes="*.jar"/>
    </path>

    <!-- 빌드 작업 정의 -->
    <target name="init">
        <!-- 빌드 디렉토리 생성 -->
        <mkdir dir="${build.dir}"/>
    </target>

    <target name="compile" depends="init">
        <!-- 컴파일 작업 -->
        <javac srcdir="${src.dir}" destdir="${build.dir}" includeantruntime="false">
            <classpath refid="classpath"/>
        </javac>
    </target>

    <target name="run" depends="compile">
        <!-- 실행 작업 -->
        <java classname="MainClass" classpath="${build.dir}:${classpath}">
            <!-- 프로그램에 전달할 인자 설정 -->
            <arg value="arg1"/>
            <arg value="arg2"/>
        </java>
    </target>

    <target name="clean">
        <!-- 빌드 생성물 삭제 -->
        <delete dir="${build.dir}"/>
    </target>

</project>

Java 프로젝트 빌드

<project name="JavaProject" default="build" basedir="." xmlns:artifact="antlib:org.apache.maven.artifact.ant">

    <!-- 속성 정의 -->
    <property name="src.dir" value="src"/>
    <property name="build.dir" value="build"/>
    <property name="lib.dir" value="lib"/>

    <!-- 클래스패스 설정 -->
    <path id="classpath">
        <fileset dir="${lib.dir}" includes="*.jar"/>
    </path>

    <!-- 빌드 작업 정의 -->
    <target name="init">
        <!-- 빌드 디렉토리 생성 -->
        <mkdir dir="${build.dir}"/>
    </target>

    <target name="compile" depends="init">
        <!-- 컴파일 작업 -->
        <javac srcdir="${src.dir}" destdir="${build.dir}" includeantruntime="false">
            <classpath refid="classpath"/>
        </javac>
    </target>

    <target name="build" depends="compile">
        <!-- 추가 빌드 작업 (예: JAR 파일 생성) -->
        <jar destfile="${build.dir}/myproject.jar" basedir="${build.dir}">
            <manifest>
                <attribute name="Main-Class" value="com.example.Main"/>
            </manifest>
        </jar>
    </target>

    <target name="clean">
        <!-- 빌드 생성물 삭제 -->
        <delete dir="${build.dir}"/>
    </target>

</project>

웹 프로젝트 빌드 (War 파일 생성)

<project name="WebProject" default="build" basedir="." xmlns:artifact="antlib:org.apache.maven.artifact.ant">

    <!-- 속성 정의 -->
    <property name="web.dir" value="web"/>
    <property name="build.dir" value="build"/>
    <property name="lib.dir" value="lib"/>

    <!-- 클래스패스 설정 -->
    <path id="classpath">
        <fileset dir="${lib.dir}" includes="*.jar"/>
    </path>

    <!-- 빌드 작업 정의 -->
    <target name="init">
        <!-- 빌드 디렉토리 생성 -->
        <mkdir dir="${build.dir}"/>
    </target>

    <target name="compile" depends="init">
        <!-- 컴파일 작업 -->
        <!-- 웹 프로젝트의 경우는 별도의 컴파일 작업이 필요할 수 있음 -->
        <!-- 예: JSP 컴파일, 자바 컴파일 등 -->
    </target>

    <target name="build" depends="compile">
        <!-- War 파일 생성 작업 -->
        <war destfile="${build.dir}/mywebapp.war" webxml="${web.dir}/WEB-INF/web.xml">
            <fileset dir="${web.dir}" includes="**/*"/>
            <lib dir="${lib.dir}"/>
        </war>
    </target>

    <target name="clean">
        <!-- 빌드 생성물 삭제 -->
        <delete dir="${build.dir}"/>
    </target>

</project>

JAR 생성 방법

<!-- 빌드 파일의 최상위 요소는 프로젝트를 정의합니다. -->
<project name="CreateJarProject" default="create-jar" basedir=".">

    <!-- 프로젝트 속성 정의 -->
    <property name="src.dir" value="src"/>
    <property name="build.dir" value="build"/>
    <property name="jar.file" value="output.jar"/>
    <property name="main.class" value="com.example.MainClass"/>

    <!-- 빌드 작업 정의 -->
    <target name="init">
        <!-- 빌드 디렉토리 생성 -->
        <mkdir dir="${build.dir}"/>
    </target>

    <target name="compile" depends="init">
        <!-- 소스 코드 컴파일 작업 -->
        <javac srcdir="${src.dir}" destdir="${build.dir}" includeantruntime="false"/>
    </target>

    <target name="create-jar" depends="compile">
        <!-- JAR 파일 생성 작업 -->
        <jar destfile="${jar.file}" basedir="${build.dir}">
            <!-- 메인 클래스 설정 -->
            <manifest>
                <attribute name="Main-Class" value="${main.class}"/>
            </manifest>
        </jar>
    </target>

    <target name="clean">
        <!-- 빌드 생성물 삭제 -->
        <delete dir="${build.dir}"/>
        <delete file="${jar.file}"/>
    </target>

</project>

파일 복사, 속성 사용, 조건문

<project name="CustomAntExample" default="build" basedir=".">

    <!-- 프로젝트 속성 정의 -->
    <property name="source.dir" value="src"/>
    <property name="destination.dir" value="dist"/>
    <property name="config.file" value="config.properties"/>
    <property name="is.production" value="true"/>

    <!-- 빌드 작업 정의 -->
    <target name="init">
        <mkdir dir="${destination.dir}"/>
    </target>

    <target name="copy-files" depends="init">
        <!-- 파일 복사 작업 -->
        <copy todir="${destination.dir}">
            <fileset dir="${source.dir}" includes="**/*.txt"/>
        </copy>
    </target>

    <target name="configure" depends="init">
        <!-- 속성 파일 생성 작업 -->
        <echo file="${destination.dir}/${config.file}" append="false">
            is.production=${is.production}
        </echo>
    </target>

    <target name="build" depends="copy-files, configure">
        <!-- 빌드 작업 실행 -->
        <echo>Build completed!</echo>
    </target>

    <target name="clean">
        <!-- 생성물 삭제 작업 -->
        <delete dir="${destination.dir}"/>
    </target>

</project>

디렉토리 압축

<project name="ZipProject" default="zip-files" basedir=".">

    <!-- 프로젝트 속성 정의 -->
    <property name="src.dir" value="source"/>
    <property name="zip.file" value="output.zip"/>

    <!-- 빌드 작업 정의 -->
    <target name="zip-files">
        <!-- 파일 압축 작업 -->
        <zip destfile="${zip.file}" basedir="${src.dir}">
            <include name="**/*.txt"/>
        </zip>
    </target>

    <target name="clean">
        <!-- 생성된 압축 파일 삭제 -->
        <delete file="${zip.file}"/>
    </target>

</project>
728x90
반응형
LIST