[Maven] ${packageInPathFormat} is not a valid reference. 아오!!
요즘에 만들고 있는 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을 가지고 새로운 프로젝트를 생성하는데 다음과 같은 경고메세지가 떨어졌습니다.
물론 결과는 이런식으로... 변환이 되지 않은 그대로의 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 하고, 새로운 프로젝트를 만들어서 확인해보니 원하는 결과를 확인할 수 있었습니다.
큼큼... 저만 저런 결과를 본 것 일까요... 구글에도 관련 내용이 거의 없는 걸 보아하니 영 깨름직합니다.
삽질한거 같아서...