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로 지정한다.
아직 여러분들이 이걸 쓰진 않지만 실제 배포시나 프로젝트시에는 쓰게될 확률이 높은 속성들이다.
그리고 처음보지만 달러사인($)을 볼수 있을 것이다.
이 ${변수}의 경우 변수의 값을 호출한다는 것이다.
아마 리눅스 계열 운영체제의 콘솔을 자주 만지다 보면 쉽게 볼수 있지만 윈도우에서는 생소한 개념이다.
변경된 설정파일을 한번 훑어보자. 그러면 전체적으로 변경된것을 느낄 수 있을 것이다.
이제 실행해보자. 아마 전과 완전하게 동일하게 작동될 것이다.
그러나 프로젝트의 유연성은 몇배로 늘어났다.
어렇게 설정파일뿐만아니라 프로그래밍에서 변수를 직접적이게 넣는것은 굉장히 나쁜 습관이다.
이런식으로 항상 변수화해서 사용해 주자.
'Usage > Java-Project Management' 카테고리의 다른 글
[Ant]jar 파일 생성과 run 분리(7) (0) | 2018.03.17 |
---|---|
[Ant]자바파일 여러개 컴파일하고 실행(6) (0) | 2018.03.17 |
[Ant]clean target(4) (0) | 2017.10.06 |
[Ant]target 나누기(3) (0) | 2017.10.06 |
[Ant]간단한 ant 프로젝트 만들기(2) (0) | 2017.10.06 |