728x90


ant빌드를 사용할떄 변수를 사용해야할 경우가 있다면 어떻게 할까?

예를 들면 전의 설정 파일을 한번 보자.


<?xml version="1.0"?>

<project name="Test" default="main" basedir=".">
<target name="init">
<mkdir dir="./bin"/>
</target>

<target name="compile" depends="init">
<javac srcdir="./src" destdir="./bin" includeantruntime="false">
</javac>
</target>

<target name="main" depends="compile">
<java classpath="./bin" classname="package1.Main">
</java>
</target>

<target name="clean">
<delete dir="./bin"/>
</target>
</project>


이 설정파일은 무슨 문제가 있을까?

바로 모든 값들이 변수가 아니라 절대 값으로 되어있다.

이러한 설정파일은 유연하게 대처할 수 없다.

예를들어서 java파일이 들어있는 src파일의 경로가 이동했다고 치자.

main/src로 이동했거나 이름이 source로 바뀌었거나.

그럴 경우 모든 변수를 일일이 찾아서 다 바꿔줘야한다.

이러한 경로를 변수로 사용할 수 있다면 당연하지만 매우 좋을것이다.


그걸위해 존재하는것이 property이다. 물론 property만 변수처럼 사용할 수 있는 것은아니다.

그러나 property는 변수로 사용할수있는 가장 기본적인 녀석이다.


<project name="Test" default="main" basedir=".">
<property name="name" value="Test"/>
<property name="version" value="1.0.0"/>
<property name="src.dir" value="${basedir}/src"/>
<property name="build.dir" value="${basedir}/bin"/>

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

<target name="compile" depends="init">
<javac srcdir="${src.dir}" destdir="${build.dir}" includeantruntime="false">
</javac>
</target>

<target name="main" depends="compile">
<java classpath="${build.dir}" classname="package1.Main">
</java>
</target>

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


해당 프로젝트는 property로 변수를 지정해서 사용한 예제이다.

보면 알겠지만 property를 총 4개를 지정했다.

보통의 경우 버전과 앱의 이름을 property로 지정한다.

아직 여러분들이 이걸 쓰진 않지만 실제 배포시나 프로젝트시에는 쓰게될 확률이 높은 속성들이다.

그리고 처음보지만 달러사인($)을 볼수 있을 것이다.

이 ${변수}의 경우 변수의 값을 호출한다는 것이다.

아마 리눅스 계열 운영체제의 콘솔을 자주 만지다 보면 쉽게 볼수 있지만 윈도우에서는 생소한 개념이다.


변경된 설정파일을 한번 훑어보자. 그러면 전체적으로 변경된것을 느낄 수 있을 것이다.

이제 실행해보자. 아마 전과 완전하게 동일하게 작동될 것이다.

그러나 프로젝트의 유연성은 몇배로 늘어났다.


어렇게 설정파일뿐만아니라 프로그래밍에서 변수를 직접적이게 넣는것은 굉장히 나쁜 습관이다.

이런식으로 항상 변수화해서 사용해 주자.

+ Recent posts