ant에서 svn 사용하기 by 오리대마왕

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>

어때요, 참 쉽죠?

덧글

  • 번뇌 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 대를 써야 하는군요. 저도 처음 알았네요.

    그리고 썰렁한 블로그라 성심성의껏 답변을 달아드리려고 노력하고 있습니다.
    질문 많이 해 주세요 하하하하하
  • 손님 2012/10/02 14:02 # 삭제

    유용한 정보 잘 보고갑니다.ㅎㅎ
※ 로그인 사용자만 덧글을 남길 수 있습니다.