java 프로젝트 하는 사람치고 아직도 ant 없이 build 하는 사람은 없을 것이라 생각한다. (아니면 한발 더 나아가 maven을 쓰고 있던지) 이 글은 ant 에서 요즘은 git같은 도전자들의 위협이 있긴 하지만 여전히 압도적으로 많이 활용되는 subversion 을 활용하는 방법을 다룬다. 이를 통해 Continuous Integration 적용 시 자동으로 최신코드를 반영하여 빌드를 만드는데 활용할 수 있다.
준비물은 apache ant, svnant 이다.
- ant 용 svn task는 다른 여러가지가 있지만, svnant 가 가장 무난하고, 잘 동작하는 듯 하다.
- 일일이 확인하기 귀찮으니 다운받은 svnant 의 압축을 풀어서 나오는 jar 들을 몽땅 ant 의 /lib 폴더에 복사한다.
자~ ant 의 build.xml 을 작성합시다. svn task의 자세한 내용은 svnant documentation 을 참고한다.
<project>
...
<!-- svn task 정의 -->
<typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpath="svnant.jar" />
<!-- svn 으로부터 checkout 받은 폴더 -->
<property name="checkout.dir" value="c:/folder/for/checkout"/>
<!-- svn 관련 -->
<property name="svn.user" value="user"/>
<property name="svn.passwd" value="passwd"/>
<property name="svn.url" value="http://url"/>
<!-- 사용시 부르는 target으로, svn 관련 작업을 수행한다.
만약 이미 checkout 했다면 update 를, 그렇지 않다면 checkout 한다. -->
<target name="get_project" depends="svn_checkout,svn_update">
</target>
<!-- checkout 폴더 존재여부를 확인하여 update할지, checkout 할지 판단한다 -->
<target name="check_export_empty">
<available file="${checkout.dir}" property="svn_export.exists"/>
</target>
<!-- 만약 checkout 폴더가 없다면, checkout한다 -->
<target name="svn_checkout" depends="check_export_empty" unless="svn_export.exists">
<svn username="${svn.user}" password="${svn.passwd}">
<checkout url="${svn.url}" destPath="${checkout.dir}" />
</svn>
</target>
<!-- 만약 checkout 폴더가 있다면, update한다 -->
<target name="svn_update" depends="check_export_empty" if="svn_export.exists">
<svn username="${svn.user}" password="${svn.passwd}">
<update dir="${checkout.dir}" />
</svn>
</target>
...
</project>
어때요, 참 쉽죠?
준비물은 apache ant, svnant 이다.
- ant 용 svn task는 다른 여러가지가 있지만, svnant 가 가장 무난하고, 잘 동작하는 듯 하다.
- 일일이 확인하기 귀찮으니 다운받은 svnant 의 압축을 풀어서 나오는 jar 들을 몽땅 ant 의 /lib 폴더에 복사한다.
자~ ant 의 build.xml 을 작성합시다. svn task의 자세한 내용은 svnant documentation 을 참고한다.
<project>
...
<!-- svn task 정의 -->
<typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpath="svnant.jar" />
<!-- svn 으로부터 checkout 받은 폴더 -->
<property name="checkout.dir" value="c:/folder/for/checkout"/>
<!-- svn 관련 -->
<property name="svn.user" value="user"/>
<property name="svn.passwd" value="passwd"/>
<property name="svn.url" value="http://url"/>
<!-- 사용시 부르는 target으로, svn 관련 작업을 수행한다.
만약 이미 checkout 했다면 update 를, 그렇지 않다면 checkout 한다. -->
<target name="get_project" depends="svn_checkout,svn_update">
</target>
<!-- checkout 폴더 존재여부를 확인하여 update할지, checkout 할지 판단한다 -->
<target name="check_export_empty">
<available file="${checkout.dir}" property="svn_export.exists"/>
</target>
<!-- 만약 checkout 폴더가 없다면, checkout한다 -->
<target name="svn_checkout" depends="check_export_empty" unless="svn_export.exists">
<svn username="${svn.user}" password="${svn.passwd}">
<checkout url="${svn.url}" destPath="${checkout.dir}" />
</svn>
</target>
<!-- 만약 checkout 폴더가 있다면, update한다 -->
<target name="svn_update" depends="check_export_empty" if="svn_export.exists">
<svn username="${svn.user}" password="${svn.passwd}">
<update dir="${checkout.dir}" />
</svn>
</target>
...
</project>
어때요, 참 쉽죠?




덧글
번뇌 2009/05/19 17:03 # 답글
안녕하세요, 최근에 오리대마왕님의 블로그를 찾아서 유용한 정보를 많이 얻게되어 감사합니다.근데 이.. svnant 를 사용중인데.
<svn username="${svn.user}" password="${svn.passwd}">
<update dir="${checkout.dir}" />
</svn>
이게 자꾸
[svn] <Update> started ...
[svn] svn: Error aborting report
[svn] svn: report aborted
[svn] <Update> faild !
라고 되면서.. 한번도 성공한적이 없네요..;
왜 이렇게.. fail 이 나는지 혹시.. 좋은 견해가 있으시면 부탁좀 드려도될까요?
error log 는 어디에 남는걸까요?;
오리대마왕 2009/05/19 21:25 #
웁 전 저런 메시지를 본 적이 없어서 잘 모르겠습니다. ^^;1. 뻔한 소리지만 일단 username, password property 값이 잘 설정되었는지 확인하시고요
2. 그 다음엔 checkout 은 잘 되는 지 먼저 해 보시고
3. 만약 update 만 자꾸 문제를 일으킨다면 ${checkout.dir}로 설정된 디렉토리에 대한 read/ write 권한에 문제가 없는지 한번 확인해 보시면 도움이 될 것 같네요.
환경이 어떻게 되세요? windows? linux?
번뇌 2009/05/20 09:47 # 답글
안녕하세요~ 처음 덧글 올렸는데.. 답변도 성의껏 달아주셔서 감사합니다~ ^^checkout 은 잘됬었거든요.. 그러고 보니 이상하네요..
해결했는데... 원인은 svnant 가 old version 이어서 났던 문제였거든요;;
실제 사용하는 svn 은 1.5 인데.. svnant 가 .. 1.1 이었네요;;
오리대마왕 2009/05/20 11:36 #
아항, 그 경우 svnant 1.2 대를 써야 하는군요. 저도 처음 알았네요.그리고 썰렁한 블로그라 성심성의껏 답변을 달아드리려고 노력하고 있습니다.
질문 많이 해 주세요 하하하하하