블로그 이미지
올해목표 // 10월 어학연수 떠나자~ 자수씨

카테고리

전체글 (1457)
Brand New! (28)
주절주절 (213)
MOT (11)
해외쇼핑 (49)
쇼핑노트 (150)
취미생활 (94)
iPhone (4)
Eclipse (121)
Google (83)
Spring (31)
JAVA (176)
JavaScript (59)
WEB (49)
Database (20)
OS (26)
Tools (8)
Tips (26)
IT정보 (1)
Book (21)
Programming (37)
외부행사 (43)
주변인들 (17)
여행노트 (60)
학교생활 (30)
회사생활 (52)
사회생활 (5)
외국어공부 (12)
잡동사니 (30)
Total
Today
Yesterday
 
04-20 00:00
 

달력

« » 2024.4
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
 

최근에 올라온 글

최근에 달린 댓글


요즘에 만들고 있는 maven archetype에 iBatis를 넣을 일이 있어서 설정을 하다보니 sqlmap-config에 resource location이 들어가는 부분이 있는 것을 확인하였습니다.

<sqlMapConfig>

 

        <sqlMap resource="kr/co/vicki/gwt/portal/dao/mysql/sqlmap/Member.xml" />

 

</sqlMapConfig>


다른 파일들은 ${package} 라는 프로퍼티를 사용할 수 있는데, location 같은 '/' 로 구분자를 두는 부분을 어떻게 처리해야 할지 몰라서 고민하던 그때 ${packageInPathFormat} 라는 것을 발견할 수 있었습니다.

즉, groupId가 kr.co.vicki.gwt.portal 이라면
${package} = kr.co.vicki.gwt.portal
${packageInPathFormat} = kr/co/vicki/gwt/portal
으로 변환이 된다는 이야기입니다.

쉽게 해결할 수 있다는 생각에 마음의 안정을 찾고 만든 archetype을 가지고 새로운 프로젝트를 생성하는데 다음과 같은 경고메세지가 떨어졌습니다.
[WARNING] org.apache.velocity.runtime.exception.ReferenceException: reference : template = archetype-resources/src/main/webapp/WEB-INF/sqlmap-config.xml [line 11,column 27] : ${packageInPathFormat} is not a valid reference.

물론 결과는 이런식으로... 변환이 되지 않은 그대로의 sqlmap-config 가 나왔습니다.

<sqlMapConfig>

 

        <sqlMap resource="${packageInPathFormat}/dao/mysql/sqlmap/Member.xml" />

 

</sqlMapConfig>



maven source repository의 소스도 체크아웃 받아서 훑어보고, 구글을 찾아봐도 저 경고에 대한 답은 찾을 수 없었습니다.
머 찾은 것이라고는 위와 관련된 버그 리포팅을 정리한 페이지만 찾을 수 있었습니다.
(내용은 원래 잘 되던건데 왜 다시 reopen 했냐는 이야기만...)

구글과 구글코드 서치를 계속 뒤지던 중에 archetype 파일들 상단에 이상한 것들이 있는 것을 발견할 수 있었습니다.

#set( $symbol_pound = '#' )

#set( $symbol_dollar = '$' )

#set( $symbol_escape = '\' )



검색을 해보니 Velocity 문법이더군요... Maven이 Velocity를 사용한다는 것을 알게 되었습니다.
 Apache Velocity is an open source software project directed by the Apache Software Foundation. Velocity is a Java-based template engine that provides a simple yet powerful template language to reference objects defined in Java code. Its aim is to ensure clean separation between the presentation tier and business tiers in a Web application (see model-view-controller design pattern).

Wikipedia 에서는 Apache Velocity에 대해서 위와 같이 설명을 하는 군요. Java-based 라는 것을 발견하고, Velocity 문법을 살짝 본 후, 다음과 같이 설정을 하고 배포를 해보았습니다.

#set( $symbol_pound = '#' )

#set( $symbol_dollar = '$' )

#set( $symbol_escape = '\' )

#set( $packageInPathFormat = $package.replaceAll('\.', '/') )

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

<!DOCTYPE sqlMapConfig

    PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"

    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

 

<sqlMapConfig>

 

        <sqlMap resource="${packageInPathFormat}/dao/mysql/sqlmap/Member.xml" />

 

</sqlMapConfig>


다시 로컬 리포지토리에 install 하고, 새로운 프로젝트를 만들어서 확인해보니 원하는 결과를 확인할 수 있었습니다.


큼큼... 저만 저런 결과를 본 것 일까요... 구글에도 관련 내용이 거의 없는 걸 보아하니 영 깨름직합니다.
삽질한거 같아서...





Posted by 자수씨
, |

갑자기 일요일 밤에 필을 받아서 Maven GwtExt Archetype 을 만들기 위해서 작업을 진행하였습니다.
기존의 maven-googlewebtoolkit2-archetype 의 소스를 참조하고 maven document 를 참조해서 만들기 시작하였습니다.

archetype.xml 에 gwtext 에 쓰이는 리소스들을 넣고서 install 까지 마치고 새로운 프로젝트를 만드는데...
아래와 같은 오류가 떨어졌습니다.
[ERROR] ResourceManager.getResource() parse exception: org.apache.velocity.exception.ParseErrorException: Lexical error: org.apache.velocity.runtime.parser.TokenMgrError: Lexical error at line 7, column 567.  Encountered: <EOF> after : ""
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error creating from archetype

Embedded error: Error merging velocity templates
Lexical error: org.apache.velocity.runtime.parser.TokenMgrError: Lexical error at line 7, column 567.  Encountered: <EOF> after : ""

어찌저찌 찾아보니 http://jira.codehaus.org/browse/ARCHETYPE-19 이런 글이 있어서 <resource> 에 넣고 filtered 를 false로 준 후에 다시 해보았더니 잘 처리가 되었습니다.

근데 중요한건;;; gwtext 는 resource 로 처리하면 아니되고 source 쪽에 넣어야지 패키지경로에 맞게 배포가 되는데...
resource 에 넣었더니 그 경로 그대로 복사가 되네요.... <source> filtered 속성도 먹지도 않고...

별도의 gwtext resource 를 maven 으로 배포해서 써야 할 것 같습니다;;;



Posted by 자수씨
, |

Maven Archetype 만들기~

JAVA/Maven / 2009. 2. 16. 01:28

Maven 하면 할수록 재미있는 툴입니다.
Maven 으로 생성된 프로젝트의 구조를 내맘대로 바꿀 수 있는 archetype 을 만들어 보겠습니다.

1. Maven Archetype 을 위한 프로젝트의 생성

콘솔창을 띄워서 아래와 같은 명령을 실행합니다.
mvn archetype:create -DgroupId=kr.co.vicki -DartifactId=maven-vicki-archetype -DarchetypeArtifactId=maven-archetype-archetype

빌드가 성공하면 아래와 같은 구조가 생성이 됩니다.



2. pom.xml

생성된 pom.xml 은 다음과 같습니다.
maven-vicki-archetype/pom.xml


참고한 가이드에서는 groupId, artifactIdversion 이 필수적이라고 하네요~ (아닌가;;;)


3. archetype.xml

복사할 소스와 리소스들의 정보가 있는 archetype.xml 입니다.
필요한 소스나 리소스들이 있다면 이 곳에 정의를 합니다.
maven-vicki-archetype/src/main/resources/META-INF/maven/archetype.xml


<id>pom.xmlartifactId 와 같아야 합니다.

다른 태그들은 프로젝트의 각 부분들을 나타냅니다.
<sources> = src/main/java
<resources> = src/main/resources
<testSources> = src/test/java
<testResources> = src/test/resources
<siteResources> = src/site

복사되는 소스의 패키지 경로가 자동으로 설정되기 위해 수정을 합니다.
maven-vicki-archetype/src/main/resources/archetype-resources/src/main/java/App.java


maven-vicki-archetype/src/main/resources/archetype-resources/src/test/java/AppTest.java


4. prototype pom.xml

새로 만든 archetype 으로 생성되는 프로젝트의 pom.xml 의 원형입니다.
maven-vicki-archetype/src/main/resources/archetype-resources/pom.xml


실행옵션에 따라 값을 설정할 수 있도록 수정을 해주고, 기본적으로 포함시킬 dependency 들을 추가하거나 수정합니다.
저는 junit 버전을 최신버전인 4.5 로 변경하였습니다.

5. Local Repository 배포

maven-vicki-archetype 폴더로 이동하여 다음 명령어를 실행합니다.
mvn install

빌드가 성공하면 Local Repository 에 아래 경로로 배포가 되어있음을 확인할 수 있습니다.
[MavenLocalRepository]/kr/co/vicki/maven-vicki-archetype/1.0-SNAPSHOT


5. 새로만든 Archetype 의 Maven 프로젝트 생성

프로젝트를 생성할 경로에 다음의 명령을 실행합니다.
mvn archetype:create -DarchetypeGroupId=kr.co.vicki -DarchetypeArtifactId=maven-vicki-archetype -DarchetypeVersion=1.0-SNAPSHOT -DgroupId=vicki.group -DartifactId=vicki.artifact

archetypeGroupId, archetypeArtifactId archetypeVersion 은 위에서 만든 내용으로 설정하고,
groupId artifactId 는 생성될 프로젝트에 맞게 설정합니다.

생성된 프로젝트 구조





하핫... Test 코드에 어노테이션을 썼는데 mvn test 로는 빌드 실패가 나오네요~
org.apache.maven.plugins::maven-compiler-plugin 플러그인을 추가해야 할 것 같습니다~




Posted by 자수씨
, |

글 보관함

최근에 받은 트랙백