728x90


2번째 포스팅때 ant설정파일을 만들었다.

그런데 사실 저렇게 하나로 전부 만드는 방식은 거의 사용하지 않는다.

왜냐하면 target은 사람이 생각하는 논리적인 단위로 나누면 나눌수록 나중에 수정시 유리하기 때문이다.

일단 target을 어떻게 나눌까?

저번 설정 파일을 다시한번 보자.


<?xml version="1.0"?>

<project name="Test" default="main" basedir=".">
<target name="main">
<javac srcdir="./src" destdir="./bin" includeantruntime="false">
</javac>
<java classpath="./bin" classname="package1.Main">
</java>
</target>
</project>


이 설정파일을 우리는 3개로 분할해 볼 것이다.

각각 init, compile, main으로 분할하도록 하자.


<?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>
</project>


총 3개의 target으로 분리되어있다. 보통 이렇게 3개로 만드는 경향이 있다.


먼저 init의 경우에는 compile하기 전에 선행해서 하는 작업들을 한다.

예를 들자면 파일을 만드는 작업들이다.

필자의 설정파일을 보면 mkdir을 사용해서 bin파일을 만들었다.

있으면 만들지 않는다. 없으면 만든다. 일단 bin파일이 있어야 뒤에 작업이 진행되도록 되어있으므로 이 작업은 선행되어야한다.


compile의 경우 java파일을 javac을 사용해서 class파일로 바꾸는 작업이다.

해당 파일들을 통쨰로 묶어서 compile이라는 target으로 만든다.

그런데 자세히보면 compile target속성에 depends라는 속성이 있다.

이 녀석을 유심히 봐야하는데 이 녀석의 역활은 이 target 작업을 하기전에 앞의 작업이 선행되어야한다는 것을 뜻한다.

위의 경우 compile을 실행하기전에 init이 실행되어야한다는 것이다.

만약 내가 compile을 호출할 경우 자동으로 init이 먼저 실행되고 그 다음에 compile이 실행된다는 이야기이다.

이런식으로 target을 쪼개도상관없는 이유는 depends 속성을 이용해서 꼬리에 꼬리로 타고넘어가서 같이 빌드가 된다.


마지막으로 main에서 java코드를 실행하게 된다.

이 main역시 compile target을 필요로 하므로 main을 실행하려면 먼저 compile이 선행되어야 하고

compile을 실행하려면 먼저 init이 선행되어야 한다.


그럼 이제 실행을 해보자.



해당 경로에 bin을 편의상 제거하였다. 여기서 콘솔을 실행시켜서 빌드를 해보자.



빌드를 하면 main을 실행하고 main을 위해서 compile이 실행되고 compile을 위해서 init이 실행된다.

결국에 타고타고 올라가게 된다.

그러면 compile을 명시적으로 빌드하면 어떻게 될까?



보다시피 compile을 호출하게된면 init이 호출된다.

+ Recent posts