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
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 파일을 종속성에 추가
- IntelliJ IDEA#로컬의 특정 JAR 파일을 종속성에 추가
- Apache Ant -> build.xml#로컬의 특정 JAR 파일을 종속성에 추가
- Gradle -> build.gradle#로컬의 특정 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>