달력

112018  이전 다음

  •  
  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  •  

[CI툴] hudson

자바 2009.04.05 23:56

얼마전 JCO 강연을 들었던 것이 있기도 하고.. 사내 작은 움직임에 CI툴에 대한 것이 있기도 하고 해서 최근 .. CI툴을 살펴보고 있습니다.
현재 나와있는 툴로는 CruiseControl, Hudson, Bamboo, TeamCity 등이 있습니다.
전자의 두 제품은 오픈소스이고 후자의 두 제품은 상용제품입니다. 단 TeamCity는 제한적인 라이센스를 제공하기도 합니다.
최근 추세(?)로는 Hudson 이 가장 뛰어난게 아닌가 싶기도 합니다만 일단은 Hudson과 Bamboo 를 주로 살펴보고 있습니다.
간단히 UI를 보고 싶으시면 다음 링크에 접속해보시면 되겠습니다.

1. Hudson : http://hudson.openframework.or.kr/
2. Bamboo : http://bamboo.openframework.or.kr/

정리를 위해 위키에 정리하고 있습니다.
일단은 생각나는데로.. 정리를 해두고. 나중에.. 좀더 제대로된 활용문서를 만들어야 할듯 합니다.

'자바' 카테고리의 다른 글

[ibatis] 홈페이지개편.??  (2) 2009.07.23
[Spring] SpringSource Tool Suite  (0) 2009.05.08
[CI툴] hudson  (0) 2009.04.05
[JSON] Jackson JSON Processor  (0) 2009.03.01
[jersey] 1.0.2 릴리즈  (0) 2009.03.01
[ibatis] 개발자 가이드 업데이트  (0) 2009.02.28
Posted by 이동국

댓글을 달아 주세요

jersey 1.0.2 릴리즈 노트를 보면서 한가지 재밌는 놈을 봤습니다.
Jackson 이라는 JSON 처리기입니다.
최근 인터페이스 관련 작업을 하면서 예전에는 XML을 주로 사용했는데 최근에는 JSON을 주로 사용하고 있습니다. 그나마 플래시에는 XML을 사용했는데 플래시에서도 json파싱이 가능하면서 json데이터가 처리하기 더 좋다고 하는군요. 아 얘기가 옆길로 셌습니다.

Jackson 는 JSON데이터를 생성하거나 JSON데이터를 빈으로 변환하는 작업을 하는 라이브러리입니다.
jersey가 내부적으로 사용하는 라이브러리이기도 합니다.

1. User.java
public class User {
public enum Gender { MALE, FEMALE };
public class Name {
private String _first, _last;
public String getFirst() { return _first; }
public String getLast() { return _last; }
public void setFirst(String s) { _first = s; }
public void setLast(String s) { _last = s; }
}

private Gender _gender;
private Name _name;
private boolean _isVerified;
private byte[] _userImage;
public Name getName() { return _name; }
public boolean isVerified() { return _isVerified; }
public Gender getGender() { return _gender; }
public byte[] getUserImage() { return _userImage; }
public void setName(String s) { _name = s; }
public void setVerified(boolean b) { _isVerified = b; }
public void setGender(Gender g) { _gender = g; }
public void setUserImage(byte[] b) { _userImage = b; }
}
2. JSON 샘플 데이터
{
"name" : { "first" : "Joe", "last" : "Sixpack" },
"gender" : "MALE",
"verified" : false,
"userImage" : "Rm9vYmFyIQ=="
}
3. JSON데이터를 빈으로 변환하는 소스
ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally
User user = mapper.readValue(new File("user.json"), User.class);
좀더 다양한 소스는 http://jackson.codehaus.org/Tutorial 를 참고하시면 됩니다.


'자바' 카테고리의 다른 글

[Spring] SpringSource Tool Suite  (0) 2009.05.08
[CI툴] hudson  (0) 2009.04.05
[JSON] Jackson JSON Processor  (0) 2009.03.01
[jersey] 1.0.2 릴리즈  (0) 2009.03.01
[ibatis] 개발자 가이드 업데이트  (0) 2009.02.28
[ibatis] 메일링리스트를 통해서 본 3.0 소식  (2) 2009.02.15
Posted by 이동국

댓글을 달아 주세요

[jersey] 1.0.2 릴리즈

자바 2009.03.01 22:51
사내 인터페이스 작성을 위해 jersey를 사용하고 있는데 1.0.2 버전이 릴리즈되었습니다.
많은 버그를 수정했고 다음의 개선사항이 있었다고 합니다.

1. The JSON with JAXB "natural" convention
JAXB 모델을 사용해서 JSON 처리를 하거나 JSON을 다시 JAXB모델로 변경하는데 개선사항이 있다는 것으로 보입니다.
2. JSON with padding provider.
JSONP 에 대한 지원이 추가된 것입니다. JSONP 에 대해 검색을 해보니 다음처럼 설명을 하고 있군요.
JSONP(JSON with Padding)는 "Dynamic Script Tags" 혹은 "On Demend Javascript" 라고 불리는 기술을 이용하여 다른 웹사이트로 HTTP 요청을 보내고 자바스크립트 콜백 함수를 통해 실행결과를 통보 받는 방식으로 수행되는 JSON 기반 RPC 규약입니다. 이렇게 하면 브라우저의 보안 정책인 “Same Origin Policy” 제약을 넘어서서 원격 서버와의 통신이 가능해지는데, 야후의 일부 API들, 그리고 최근 개선된 Google Calendar API 등이 이미 이러한 방식을 사용하고 있습니다.
3. Resource method specific filters.
4. Atom Abdera support.
아파치의 atom 구현체인 Apache Abdera 프로젝트의 Atom 엔트리와 Feed 자바타입을 지원
5. Implicit produces.
6. Servlet as a filter.
7. Client using Apache HTTP client.
8. Pavel Bucek has added support for SSL configuration of the Client API when using HttpURLConnection

공부를 게을리 했더니 용어들이 모두 어렵습니다.
일단 내일 라이브러리 업데이트하고 API나 문서를 보면서 실제 내용을 파악해야 할 것으로 보입니다.

좀더 자세한 내용은 http://blogs.sun.com/sandoz/entry/jersey_1_0_2_is 를 참고하시면 됩니다.

'자바' 카테고리의 다른 글

[CI툴] hudson  (0) 2009.04.05
[JSON] Jackson JSON Processor  (0) 2009.03.01
[jersey] 1.0.2 릴리즈  (0) 2009.03.01
[ibatis] 개발자 가이드 업데이트  (0) 2009.02.28
[ibatis] 메일링리스트를 통해서 본 3.0 소식  (2) 2009.02.15
[자바] 인코딩  (1) 2009.01.30
Posted by 이동국

댓글을 달아 주세요

ibatis 개발자 가이드는 ibatis 홈페이지에서도 한글 문서를 배포하고 있지만 수정시 매번 메일로 전달해야 되서 사실상 kldp.net 에서 배포하고 있습니다.
배포 페이지는 다음 링크를 참고하시면 됩니다.

http://kldp.net/frs/?group_id=827&release_id=2208

오늘 일부 내용을 수정했습니다.
내용이 추가되거나 큰 수정이 있었던 것은 아니고 어제 명신님이라는 분으로 부터 피드백 메일이 와서 해당 내용을 반영한 것입니다. 음 이렇게 성함을 밝혀도 되는지 모르겠네요. ^^

수정내용은 8페이지의 maxRequests 에 대한 내용입니다.

1. 원문
Different DBMS have different limits, but no database is without these limits. This should usually be at least 10 times maxTransactions (see below) and should always be greater than both maxSessions and maxTransactions.
 
2. 번역본
다른 DBMS는 다른 제한을 가진다. 이것은 최소한 10개의 maxTransactions이고 언제나 maxSessions과 maxTransactions보다 크다.
 
3. 고친 번역
다른 DBMS는 다른 제한을 가지지만, 이러한 제한이 없는 데이터베이스는 없다. 이러한 제한은 보통 최소한 maxTransaction의 10배이며(아래를 보라) 항상 maxSessions와 maxTransactions보다는 크다.

변명이지만 이 문서 번역은 거의 3년전인가 했던 내용이기도 하고 그 당시에는 번역하는데 미쳐 번역품질에 대해서는 그다지 고민을 못해서 오히려 없는게 나을것 같다고 불평하시는 분이 있을까 고민입니다.
너그럽게 봐주시길 바랍니다. ^^

'자바' 카테고리의 다른 글

[JSON] Jackson JSON Processor  (0) 2009.03.01
[jersey] 1.0.2 릴리즈  (0) 2009.03.01
[ibatis] 개발자 가이드 업데이트  (0) 2009.02.28
[ibatis] 메일링리스트를 통해서 본 3.0 소식  (2) 2009.02.15
[자바] 인코딩  (1) 2009.01.30
[eclipse] 2008년 정리  (1) 2009.01.16
Posted by 이동국

댓글을 달아 주세요

원래 작년에 베타버전이 릴리즈되어야 할 터였는데.. 아직도 그다지 소식이 없습니다.
간혹 메일링리스트를 통해 한번씩 언급이 되기는 하지만 이 역시 .. 극히 적죠..
메일링리스트를 볼때.. 몇가지는 알수 있을듯 합니다.

▣ iBATIS 2.0
1. 계획했던 모든 기능이 완성되어 있어 더이상의 기능추가는 없다. 단 유지보수및 버그수정을 한 버전은 마이너로 릴리즈될수 있다.


▣ iBATIS 3.0
1. http://opensource.atlassian.com/confluence/oss/display/IBATIS/iBATIS+3.0+Whiteboard 를 통해 3.0에서 구현할 많은 아이디어를 받았는데, 현재 이 화이트보드 페이지는 너무 복잡해서 더이상 보지(?)않는다고 합니다. 하지만 3.0을 구현하기 위한 많은 아이디어는 충분히 모았다고 생각한다네요.
2. 조만간 베타버전을 릴리즈 할 예정이며 소스는 http://svn.apache.org/repos/asf/ibatis/trunk/java/ibatis-3/ 에서 받을수 있습니다.
3. 코어는 이미 완성되어는데, XML은 새로운 형태로 구현되었고 좀더 자세한 정보를 가진다고 합니다.
그외 매핑, 자동매핑, 조인매핑, 캐싱, 트랜잭션 관리, 배치처리, 자동커밋과 그외 최근에 도입된 많은 기술들이 구현되었습니다.
4. 구현이 남아 있는 부분은 다음과 같습니다.
* 인터페이스 바인딩
* 애노테이션으로 설정하기
* 새로운 동적 SQL

이 정도네요..

▣ 메서드명
기존에 2.0 버전은 com.ibatis.sqlmap.client.SqlMapClient 인터페이스의 delete, executeBatch, executeBatchDetailed, insert, queryForList, queryForMap, queryForObject,  queryForPaginatedList, queryWithRowHandler, startBatch, update 가 제공되었습니다만.
3.0에는 org.apache.ibatis.api.SqlSession 인터페이스가 메서드를 제공합니다.


▣ MapperConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration
    PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
    "http://ibatis.apache.org/dtd/ibatis-config-3.dtd">

<configuration>

  <properties resource="org/apache/ibatis/parser/mapper.properties">
    <property name="driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
  </properties>

  <settings>
    <setting name="cacheEnabled" value="true"/>
    <setting name="lazyLoadingEnabled" value="true"/>
    <setting name="multipleResultSetsEnabled" value="true"/>
    <setting name="useColumnLabel" value="true"/>
    <setting name="enhancementEnabled" value="false"/>
    <setting name="generatedKeysEnabled" value="false"/>
    <setting name="defaultExecutorType" value="SIMPLE"/>
    <setting name="defaultStatementTimeout" value="25000"/>
  </settings>

  <typeAliases>
    <typeAlias alias="Author" type="domain.blog.Author"/>
  </typeAliases>

  <typeHandlers>
    <typeHandler javaType="String" jdbcType="VARCHAR" handler="org.apache.ibatis.parser.ExampleTypeHandler"/>
  </typeHandlers>

  <objectFactory type="org.apache.ibatis.parser.ExampleObjectFactory">
    <property name="objectFactoryProperty" value="100"/>
  </objectFactory>

  <plugins>
    <plugin interceptor="org.apache.ibatis.parser.ExamplePlugin">
      <property name="pluginProperty" value="100"/>
    </plugin>
  </plugins>

  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC">
        <property name="" value=""/>
      </transactionManager>
      <dataSource type="UNPOOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>

  <mappers>
    <!-- mapperXML vs. mapperClass-->
    <mapper resource="org/apache/ibatis/parser/AuthorMapper.xml"/>
  </mappers>
</configuration>

▣ 다양한 ResultMap 설정
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper
    PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
    "http://ibatis.apache.org/dtd/ibatis-mapper-3.dtd">

<mapper namespace="com.domain.BlogMapper">

  <resultMap id="blogWithPosts" type="Blog">
    <id property="id" column="id"/>
    <result property="title" column="title"/>
    <association property="author" column="author_id" select="com.domain.AuthorMapper.selectAuthorWithInlineParams"/>
    <collection property="posts" column="id" select="selectPostsForBlog"/>
  </resultMap>

  <resultMap id="joinedPost" type="domain.blog.Post">
    <id property="id" column="post_id"/>
    <result property="subject" column="post_subject"/>
    <association property="author" column="post_author_id" resultMap="joinedAuthor"/>
    <collection property="comments" column="post_id" resultMap="joinedComment"/>
    <collection property="tags" column="post_id" resultMap="joinedTag"/>
    <discriminator javaType="int" column="draft">
      <case value="1" resultMap="draftPost"/>
    </discriminator>
  </resultMap>

  <resultMap id="selectImmutableAuthor" type="domain.blog.ImmutableAuthor">
    <constructor>
      <id column="id" property="id"/>
      <result property="username" column="username"/>
      <result property="password" column="password"/>
      <result property="email" column="email"/>
      <result property="bio" column="bio"/>
      <result property="favouriteSection" column="favourite_section"/>
    </constructor>
  </resultMap>

</mapper>

관련 소식은 http://www.mail-archive.com/user-java@ibatis.apache.org/msg13225.html 에서 다시 확인하실수 있습니다.

'자바' 카테고리의 다른 글

[jersey] 1.0.2 릴리즈  (0) 2009.03.01
[ibatis] 개발자 가이드 업데이트  (0) 2009.02.28
[ibatis] 메일링리스트를 통해서 본 3.0 소식  (2) 2009.02.15
[자바] 인코딩  (1) 2009.01.30
[eclipse] 2008년 정리  (1) 2009.01.16
[groovy] HTTPBuilder module 사용하기  (0) 2009.01.11
Posted by 이동국

댓글을 달아 주세요

  1. 서영아빠  댓글주소 수정/삭제 댓글쓰기 2009.02.16 09:12 신고

    메소드명이 맘에 드네요. selectOne, selectList.

[일상] ubuntu

일상 2009.02.02 23:06
최근 팀내 투입된 개발자가 기본 개발환경으로 ubuntu로 가져가는 바람에 저도 한번 해봤습니다.



버전을 거듭할수록 개발환경으로는 모자람이 없어지는 것 같습니다.
아직 회사 데스크탑에는 셋팅하지 못했지만 노트북에는 기본적으로 사용할려고 합니다.
MS Windows 가 아쉬울때를 위해 VirtualBox 로 만들어두었습니다.
Posted by 이동국

댓글을 달아 주세요

  1. 권남  댓글주소 수정/삭제 댓글쓰기 2009.02.03 12:43 신고

    2년째 Ubuntu를 개발환경으로 사용하고 있습니다. (그래서 저는 우리회사 겜을 못합니다. --;)
    개발환경으로 정말 괜찮아요. 화이팅~
    특히 Eclipse 코딩용 글꼴은 Dejavu Sans Mono와 네이버의 나눔 고딕을 조합해서 써보시길 가독성이
    꽤 좋습니다. 나눔 고딕 코딩은 콘솔화면용 글꼴로 괜찮습니다(코딩용으로는 Dejavu를 못따라가는 듯).

    http://kwon37xi.springnote.com/pages/2623888

    • 이동국  댓글주소 수정/삭제 2009.02.03 14:38 신고

      리눅스가 굉장히 성장해서 데스크탑으로도 전혀 손색이 없지만 아무래도 손에 익지 않았다는게 어려움인거 같습니다. ^^
      그래도.. 계속 쓰다보면.. 오히려 MS Windows가 불편하다고 느껴지기도 합니다.

  2. 이카루스  댓글주소 수정/삭제 댓글쓰기 2009.04.09 10:19 신고

    전. 오픈수세를 사용하고 있습니다.
    개발 전용으로는 윈도우보단 리눅스가 손에 너무 익숙해져버렸네요.

[팁] Live USB Creator

일상 2009.01.30 00:04
간혹 심심하면 리눅스를 받아 설치해보고 이것저것 끄쩍끄쩍 거려봅니다.
예전에는 CD 이미지를 받아 구워서 사용했는데, USB에 구워서 사용할수도 있더군요.
찾아보니 아래 2가지 정도 있습니다.

http://unetbootin.sourceforge.net/
https://fedorahosted.org/liveusb-creator/

unetbootin 가 사용하기에는 좀더 나은 듯 합니다.
현재 나와있는 대부분의 리눅스를 지원합니다.


OK 버튼을 눌러 작업을 시작하면 아래처럼 파일을 복사하기 시작합니다.


작업이 완료된 후 입니다.





'일상' 카테고리의 다른 글

[일상] 도메인 기간 연장  (0) 2009.02.14
[일상] ubuntu  (4) 2009.02.02
[팁] Live USB Creator  (0) 2009.01.30
[생각] 시각과 시간  (2) 2009.01.16
[java] 외국 자바개발자가 본 2008년의 가장 중요한 뉴스  (0) 2009.01.11
[일상] Windows 7 베타  (0) 2009.01.10
Posted by 이동국

댓글을 달아 주세요

[성능] VisualVM

성능 2009.01.18 21:29

VisualVM 이라는 성능체크 또는 모니터링 툴이 있습니다.
라이센스는 GPLv2 + CE입니다.
홈페이지인 https://visualvm.dev.java.net/ 에서는 All-in-One Java Troubleshooting Tool 이라고 소개하고 있습니다.
제공하고 있는 기능 자체만 보면 All-in-One 이라고 볼수 있겠지만 실제 기능 각각을 사용하다보면 아쉬운 점은 있습니다.

리뷰라기 하기엔 다소 빈약한 글입니다만.. 살펴봤습니다.
화면 스샷과 간단한 설명은 다음 링크들에서 볼 수 있습니다.
사실 설명보다는 스샷이 대부분입니다. ^^

VisualVM 기본 : http://openframework.or.kr/Wiki.jsp?page=Using_visualvm
VisualVM의 모니터링 기능 활용하기 : http://openframework.or.kr/Wiki.jsp?page=Using_visualvm_monitor
VisualVM의 쓰레드 모니터링 기능 활용하기 : http://openframework.or.kr/Wiki.jsp?page=Using_visualvm_thread
VisualVM의 프로파일러 기능 활용하기 : http://openframework.or.kr/Wiki.jsp?page=Using_visualvm_profiler

1. VisualVM 의 기본화면


2. 모니터링 기본 화면


3. 힙 덤프


4. 쓰레드 덤프


5. 프로파일러


제품을 사용해보니 간간히 눈에 띄는 버그가 있습니다.
1. 톰캣 비정상 종료
이를테면 eclipse에서 tomcat를 시작할 경우 VisualVM으로 프로파일링을 하면 tomcat을 강제로 죽이는 문제가 있습니다. 이 경우 VisualVM을 먼저 실행하고 eclipse를 실행해서 사용하면 tomcat이 죽는 경우가 별로 없습니다. 사실 이것도 PC마다 다를수 있겠습니다.
2. CPU프로파일링 기준 모호
그외 프로파일러 기능에서 CPU프로파일링시 호출되는 메서드 별로 데이터를 보여주는 것이 아니라 클래스 별로 보여준다고 할까요..?? 프로파일링 데이터의 기준이 다소 모호한 면이 있습니다. 그게 아니라면 설정이 다른데 숨어있다고 밖에 볼수 없겠습니다.

아직 버전이 1.1이기 때문에 개선의 여지가 많습니다. 저는 개인적으로 JProfiler 정식 사용자라 제품간에 비교가 되기는 하지만 상용제품과 비교하는 건 말이 안되는 것이죠.
하지만 힙덤프, 쓰레드덤프, 메모리덤프 등.. 좋은 기능을 많이 제공하고 있습니다.
Posted by 이동국

댓글을 달아 주세요

  1. 서영아빠  댓글주소 수정/삭제 댓글쓰기 2009.01.23 18:52 신고

    좋은 정보 감사합니다. ^^

  2. 박진형  댓글주소 수정/삭제 댓글쓰기 2010.03.15 13:15 신고

    유용한 정보 감사합니다. 담아갑니다.

JDK 1.5 이후 java.lang.management아래에는 관리 인터페이스로 많은 MXBean을 제공합니다.
제가 알고 있는 오픈소스 모니터링및 관리툴인 Lambda Probe 에 비하면 많은 부분 작업을 더해야 겠지만 기본적인 기능만으로도 간단한 모니터링이 가능합니다.

JMX나 다른 기타 기능을 통해 통합 모니터링 시스템을 만들수 있으리라는 짐작을 하게 합니다.
시간을 내어 간단히 인터페이스 기능만을 사용해 웹 페이지를 꾸며봤습니다.
http://monitor.openframework.or.kr/index.jsp

좀 지속적으로 해보고자 구글에는 프로젝트로 등록했구요. ^^
http://code.google.com/p/monitoring-application/

아직 구문번역은 대충 해놓은 상태입니다. 오역이나 의견이 있으시면 바로 알려주셔도 됩니다.. 그럼 감사하죠..^^


# GC정보보기


# 메모리 정보보기


# 런타임 정보보기


# 쓰레드 정보보기


메모리 사용에 대해 어떤 경계점을 지날 경우 자동알림도 가능하겠네요. 물론 코딩이 좀 들어가야 겠지만
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/management/MemoryNotificationInfo.html

아무튼 이미 이런 기능이 JDK 1.5에도 많이 추가되어 있는데 사용하는 건 극히 일부라는걸 항상 느끼게 됩니다.


Posted by 이동국

댓글을 달아 주세요

  1. 하얀말  댓글주소 수정/삭제 댓글쓰기 2009.01.06 14:42 신고

    오올~ 잼난 일을 하시는군요!!!!???

  2. 박진형  댓글주소 수정/삭제 댓글쓰기 2010.03.15 13:24 신고

    유용한정보 감사합니다. 담아갑니다.


업무상 프로젝트 간의 의존성이 있을 경우 다른 SVN에 등록된 프로젝트의 소스를 가져와서 사용해야할 필요가 있었는데, Ant로 SVN작업을 처리하는 방법이 있네요.

먼저 svnant가 필요합니다. svnant는 subclipse 프로젝트에서 제공하고 있습니다. 다운로드는 다음 URL에서 하시면 됩니다.
http://subclipse.tigris.org/svnant.html

# build.properties파일
# -----------------------------------------------------------------------------
# build.properties
# 이 파일은 svnant에서 제공하는 기본 build.xml 파일을 참고해서 다시 만든것입니다.
# -----------------------------------------------------------------------------
svnant.version=1.2.1

# -----------------------------------------------------------------------------
# 필요한 모든 jar파일
# -----------------------------------------------------------------------------
lib.dir=lib

####실제로 필요한 SVN 프로퍼티들 ####
svn.repository.url=https://ksug.googlecode.com/svn/trunk/
svn.project.base.path=SpringReference
svn.username=fromm0
svn.password=1111
# 태그명, 빌드전에 반드시 수정되어야 하는 값
# export하기 위해 사용됨
tag.name=SOME_TAG_NAME_12222008
# 새로운 브랜치명
# 브랜치를 새롭게 생성할 때만 사용됨
new.branch.name=NEW_BRANCH_12222008
####실제로 필요한 SVN 프로퍼티들 ####

# build.xml파일
<?xml version="1.0"?>
<!-- Sample build file used to retrieve svnant's sources -->
<project name="svnant" basedir="." default="checkoutLatest">

    <!--  all properties are in build.properties -->
    <property file="build.properties" />

    <!-- SVN and SVN-ANT Tasks properties -->
    <property name="svn.repository.url" value="${svn.repository.url}" />
    <property name="svn.project.base.path" value="${svn.project.base.path}" />
    <property name="svn.base.url" value="${svn.repository.url}/${svn.project.base.path}" />
    <property name="svnant.javahl" value="false" />
    <property name="svnant.svnkit" value="true" />
    <!-- SVN and SVN-ANT Tasks properties -->


    <!-- path to the svnant libraries. Usually they will be located in ANT_HOME/lib -->
    <path id="svnant.classpath">
        <fileset dir="${lib.dir}">
            <include name="**/*.jar" />
        </fileset>
    </path>

    <!-- load the svn task -->
    <typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="svnant.classpath" />

    <target name="clean">
        <delete dir="src_latest" />
    </target>

    <target name="checkoutLatest">
        <svn username="${svn.username}" password="${svn.password}">
            <checkout url="${svn.base.url}" revision="HEAD" destPath="src_latest" />
        </svn>
    </target>

    <!-- *************************************************************** -->
    <!-- tool-availability: Determine if SVN-ANT is available.           -->
    <!-- *************************************************************** -->
    <target name="tool-availability">
        <available resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="svnant.classpath" property="available.svnant" />
        <echo message="SVN-ANT is available = ${available.svnant}" />
    </target>


    <!-- **************************************************************** -->
    <!-- does-svnant-exist: depends on tool-availablility and     -->
    <!--                    displays error message                                   -->
    <!-- ***************************************************************** -->
    <target name="does-svnant-exist" depends="tool-availability">
        <fail unless="available.svnant">
      SVN-ANT is not available, cannot perform tagging or checkout/export svn ant task.
     </fail>
    </target>


    <!-- ****************************************************************** -->
    <!-- svntag: performs tagging using properties from                              -->
    <!--         build.properties and uses SVNANT tasks                              -->
    <!-- ******************************************************************* -->
    <target name="svntag" description="tags individual project using svnant task">
        <property name="svn.tag.message" value="Tagging Project ${project.name} with tag name ${tag.name} from trunk " />
        <property name="src.url" value="${svn.base.url}/${project.name}/trunk/" />
        <property name="dest.url" value="${svn.base.url}/${project.name}/tags/${tag.name}" />

        <echo message="${svn.tag.message}" />
        <echo message="${src.url}" />
        <echo message="${dest.url}" />

        <svn javahl="${svnant.javahl}" svnkit="${svnant.svnkit}" username="${svn.username}" password="${svn.password}">
            <copy srcUrl="${src.url}" destUrl="${dest.url}" message="${svn.tag.message}" />
        </svn>
    </target>


    <!-- ****************************************************************** -->
    <!-- svnexport: performs export using properties from                            -->
    <!--            build.properties and uses SVNANT tasks                           -->
    <!-- ****************************************************************** -->
    <target name="svnexport" description="exports individual project using svnant task">
        <property name="svn.tag.message" value="Exporting Project ${project.name} with tag name ${tag.name}" />
        <property name="src.url" value="${svn.base.url}/${project.name}/tags/${tag.name}" />
        <property name="destPath" value="${dest.path}" />
        <echo message="${svn.tag.message}" />
        <svn javahl="${svnant.javahl}" svnkit="${svnant.svnkit}" username="${svn.username}" password="${svn.password}">
            <export srcUrl="${src.url}" destPath="${destPath}/${project.name}" />
        </svn>
    </target>

    <!-- ****************************************************************** -->
    <!-- svnbranch: creates a new branch using properties from                       -->
    <!--            build.properties and uses SVNANT tasks                           -->
    <!-- ****************************************************************** -->
    <target name="svnbranch" description="creates a new branch for individual project using svnant task">

        <property name="svn.branch.message" value="Creating new branch for
    Project ${project.name} with new branch name ${new.branch.name} from
    trunk" />
        <property name="src.url" value="${svn.base.url}/${project.name}/trunk/" />
        <property name="dest.url" value="${svn.base.url}/${project.name}/branches/${new.branch.name}" />

        <echo message="${svn.branch.message}" />
        <echo message="${src.url}" />
        <echo message="${dest.url}" />

        <svn javahl="${svnant.javahl}" svnkit="${svnant.svnkit}" username="${svn.username}" password="${svn.password}">
            <copy srcUrl="${src.url}" destUrl="${dest.url}" message="${svn.branch.message}" />
        </svn>
    </target>
</project>

현재 필요한 기능은 실제 최신 버전의 체크아웃이라 checkoutLatest만 해봤는데 잘됩니다. ^^
Posted by 이동국

댓글을 달아 주세요