[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을 가지고 새로운 프로젝트를 생성하는데 다음과 같은 경고메세지가 떨어졌습니다.


[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 하고, 새로운 프로젝트를 만들어서 확인해보니 원하는 결과를 확인할 수 있었습니다.



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

삽질한거 같아서...






댓글

가장 많이 본 글