'메이븐'에 해당하는 글 2건

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


출판 전부터 관심을 가지고 지켜보던 자바지기님의 메이븐책이 출판되었다. 원래 출판 전에는 국내에 메이븐 관련 책이 없었지만, 현재는 번역서가 나와있다. 하지만, 국내 저자가 쓴 메이븐 책으로써는 아마 최초가 아닐까 싶다. 저자와의 친분과 메이븐에 대한 관심 때문에 베타리뷰를 하고 추천평을 쓰게 되었다. 평소에 저자에 대해 본인이 가졌던 존경 때문에 아래 추천평을 쓰는 것은 큰 기쁨이 되었다. 

2006년 메이븐을 처음 사용했을 당시의 기억이 아직도 생생하다. 당시 다른 개발자가 구축해 놓은 메이븐 기반의 프로젝트를 받아 운영하게 되었다. 예전에는 앤트를 사용하고 있었고, 나는 앤트의 사용법과 동작원리에 대해 잘 이해하고 있었다. 메이븐을 써보니 빌드를 수행하기는 매우 쉬웠다. 'mvn package'를 실행하면 모든 것이 잘 작동했다. 하지만, 난 메이븐이 어떻게 동작하는지 알고 싶었고, 빌드정보가 기술된 pom.xml을 열어보았다. 잠시 후 난 당혹감을 느꼈다. 내가 기대하던 항목이 보이지 않았기 때문이다. 소스의 위치를 지정하는 곳도 보이지 않았고, 컴파일 결과가 들어갈 위치를 지정해주는 곳도 보이지 않았다. 메이븐이 내 소스의 위치를 어떻게 알고 컴파일하지? 나는 강한 의문에 휩싸였고 학습을 시작했다. 그리고 꽤 많은 시간이 지난 후에야 메이븐에 익숙해질 수 있었다. 

그 후 내게도 메이븐에 대해 문의하는 사람이 생겼다. 얘기를 들어보면 내가 처음에 그랬던 것처럼 그들도 당혹스러워하고 있었다. 동작원리를 설명해 주며 왜 메이븐이 왜 당혹감을 주는지를 곰곰이 생각해보게 되었다. 내가 얻은 결론은 메이븐에 적용 된 디자인이 직관적이지 않고 이해를 어렵게 한다는 것이었다. 위 문제를 인지한 후 메이븐을 이해하는 데 도움이 될 만한 글을 블로그에 정리하기로 했다. 하지만, 글을 쓰다 보니 설명해야 할게 많았고, 이해를 돕기 위한 다수의 예제도 필요함을 느꼈다. 이런 어려움으로 결국 나는 글을 완성하지 못했다. 그러던 어느 날 이 책의 저자인 박재성 씨가 내게 메이븐을 관련 책을 쓰겠다는 얘기를 했다. 나는 필요성에 충분히 공감했고, 많은 개발자에게 도움이 될 것으로 생각했다.

베타 리더로 책을 읽으며 색다른 즐거움이 있었다. 위키북 프로젝트를 함께 하지는 못했지만, 책을 통해 당시 저자의 진지한 고민과 역동적 감성을 어렵지 않게 느낄 수 있었기 때문이다. 사실 이런 면에서 이 책은 단순히 메이븐의 사용법만을 전달하는 책이 아니다. 오히려 문제가 많은 현실가운데 이상향을 그리고, 메이븐을 손에 든 채 이상향을 향해 한 걸음씩 전진하는 개발자의 용기 넘치는 모습을 보여준다. 독자는 일차적으로 메이븐에 대한 이해를 얻게 되겠지만, 각 장의 시작과 말미 그리고 가끔 설명 중간에 나오는 저자의 회고적인 글을 통해 이상을 가진 개발자의 고뇌와 시행착오 그리고 마침내 얻게 되는 희열을 엿볼 수 있을 것이다. 나는 이를 단순한 지식의 전달을 뛰어넘는 경험의 전달이라 생각하며, 이 책을 가장 빛나는 하는 요소라 생각한다. 만약 메이븐에 관심 있는 개발자라면 이 책의 일독을 권하고 싶다.

 

WRITTEN BY
차민창
르세상스 엔지니어가 사회를 이끌어나가는 상상을 하며!

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
메이븐에서 테스트에 대한 보고서를 만들어주는 플러그인 surefire에 버그가 있습니다.

JIRA : http://jira.codehaus.org/browse/SUREFIRE-341

문제

pom.xml에 surefire 관한 설정을 한 후, 메이븐 빌드 실행 중 surefire:test 단계에서 아래와 같은 에러 메세지가 나옵니다.

org.apache.maven.surefire.booter.SurefireExecutionException: Unable to instantiate and execute Surefire; nested exception is java.lang.ClassNotFoundException: org.apache.maven.surefire.Surefire
java.lang.ClassNotFoundException: org.apache.maven.surefire.Surefire
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at org.apache.maven.surefire.booter.IsolatedClassLoader.loadClass(IsolatedClassLoader.java:103)
    at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:281)
    at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:818)

원인

위 지라의 보고내용과 제 경우를 볼 때 로컬 저장소 경로에 영문 외의 멀티 바이트 문자가 들어있는 경우 클래스 로딩을 하지 못하는 것으로 보입니다.

해결책

기본적으로 지정된 로컬 저장소 C:\Documents and Settings\{사용자명}\.m2 를 영문만으로 이루어진 다른 경로로 바꾸어 주면 됩니다.

로컬 저장소 위치 바꾸는 방법

메이븐을 직접 설치하여 콘솔에서 사용하는 경우에는 "메이븐 홈 디렉토리/conf/settings.xml"의  <localRepository></localRepository> 태그 안의 값을 알맞게 고쳐주면 됩니다.

이클립스에서 subeclipse 플러그인(현 2007/11/07일 최신버젼 기준)을 이용하는 경우에는 Window -> Preferences -> Maven -> Global Settings File 에서 위 localRepository가 재설정 된 settings.xml 파일을 선택해주면 됩니다.

WRITTEN BY
차민창
르세상스 엔지니어가 사회를 이끌어나가는 상상을 하며!

,