728x90
반응형
Ant는 자바 기반 프로젝트를 빌드하고 관리하기 위한 자동화 도구입니다. Apache Ant는 XML 기반의 빌드 스크립트를 사용하여 프로젝트의 컴파일, 테스트, 패키징 등과 같은 작업을 수행할 수 있습니다. 이러한 빌드 작업은 사용자가 정의한 빌드 파일에 명시되며, 각 작업은 목적에 따라 태스크로 구성됩니다.
핵심 개념:
- 빌드 파일 (Build File):
- Ant로 작성된 빌드는 XML 파일입니다. 일반적으로 build.xml이라는 이름을 가지며, 프로젝트의 빌드 프로세스를 정의합니다.
- 프로젝트 (Project):
- 빌드 파일에 정의된 모든 작업들은 하나의 프로젝트로 묶입니다. 프로젝트는 빌드의 최상위 요소로 간주되며, 모든 작업은 이를 기준으로 실행됩니다.
- 태스크 (Task):
- Ant 빌드 파일에서 각 작업은 태스크로 표현됩니다. 예를 들어, 컴파일, 복사, JAR 생성 등이 태스크에 해당합니다.
- 속성 (Property):
- 빌드 파일에서 사용되는 변수를 나타냅니다. 속성을 사용하여 파일 경로, 버전 번호 등을 설정할 수 있습니다.
- 의존성 (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
'Spring' 카테고리의 다른 글
JAVA metaspace OOM(Out Of Memory) 현상 원인 및 해결방법 (1) | 2024.05.10 |
---|---|
[Jenkins] jenkins pipline script 작성 예시 (1) | 2023.04.21 |
[Jenkins] docker 이미지를 nexus3 에 배포 시 오류케이스 (1) | 2023.04.20 |
[Jenkins] jenkins build 시 ./gradlew: Permission denied 오류 해결 (1) | 2023.04.12 |
[Jenkins] jenkins A problem occurred configuring root project 오류 해결 (0) | 2023.04.10 |