Spring 3.0의 최신 소스를 빌드해서 사용하는 방법을 알아봤던 이전 글에서 지적했듯이 Maven의 버전관리 기능은 주의하지 않으면 큰 혼란을 일으킬 수 있다.

 

Maven Version

메이븐의 비공식 매뉴얼인 Maven: The Definitive Guide에 소개된 Maven의 버전포맷은 다음과 같다. (참고로 Maven 개발팀은 버전설정과 관련한 공식문서를 준비하자는 이슈를 등록하고.. 질질 끌고 있다)

<major version>.<minor version>.<incremental version>-<qualifier>

Major,minor,incremental 버전은 모두 0 또는 이상의 숫자여야 한다. Qualifer에는 다시 build no가 들어갈 수 있지만 현재(2.0.9)는 무조건 문자로 처리되어 비교되므로 build no 개념은 별 의미가 없다.

위의 포맷의 모든 요소는 모두 optional이다. 대신 major version과 qualifier 중의 하나는 반드시 존재해야 한다.

문제는 위의 포맷과 비슷해보이지만 정확히 맞지 않는 경우 Maven은 에러를 내는 것이 아니고 전체 버전을 임의의 스트링 값을 가질 수 있는 qualifier로 취급해버린다는 것이다.  바로 이점이 Maven의 버전을 사용할 때 위험한 부분이다.

예를 들어 1.0-M1은 major=1, minor=0, incremental=0, qualifier=M1으로 파싱되지만 1.0.M1은 major=0, minor=0, incremental=0, qualifier=1.0M1으로 파싱되다는 점이다. 대쉬(-) 앞에 숫자와 점(.)으로 이루어진 버전이 나오고 그 외에는 모두 qualifier라는 규칙 때문에 1.0.M1은 표준 포맷으로 파싱이 불가능하고 숫자버전은 모두 0이고 1.0.M1이 qualifier로 취급되어 버린다.

POM 설정에서 정확히 일치하는 버전을 단 한번만 사용한다면 별 문제가 문제가 없다.

하지만

  • 버전범위(version range)를 사용하는 경우
  • 같은 아티팩트의 다른 버전이 동시에 존재하는 경우 그것을 자동으로 해결의 경우
  • RELEASE, LATEST와 같이 최신버전을 자동으로 선택하는 경우

에는 문제가 될 수 있다. 3.0.0.BUILD-001 보다 2.5.6이 더 최신버전이라고 판다하는 식의 문제가 생기기 때문이다.

따라서 Maven을 사용할 경우에는 최소한 숫자버전이 정확히 들어가도록 표준 포맷을 따라서 버전을 붙여야 한다.

표준을 지키지 않는 포맷을 아무런 경고 메시지조차 없이 허용하고 상당한 혼란을 줄 수 있다는 면에서 Maven 개발자들의 무책임함이 느껴지는 부분이지만, 뭐 어쨌든 Maven이 정한 룰이니까 잘 따르면 될 것이라고 생각할 수 있다.

 

OSGi Version

문제는 OSGi 번들이다. OSGi 번들로 패키징된 라이브러리나 아티팩트의 사용이 점차로 늘고 있다. 당장에 Eclipse의 모든 번들이 그렇고, 스프링이 OSGi/DM에 올인하면서 스프링 모듈을 포함해서 대표적인 라이브러리를 OSGi번들호환으로 재포장해서 제공하고 있는 리포지토리의 사용이 그렇다.

OSGi는 Maven과 유사해보이지만 큰 차이가 있는 버전포맷을 가지고 있다. 다음은 OSGi 스펙에 나오는 버전포맷이다.

version ::= major( ‘.’ minor ( ‘.’ micro ( ‘.’ qualifier )? )? )?
major  ::= number                   // See 1.3.2
minor ::= number
micro ::= number
qualifier  ::= ( alphanum | ’_’ | ‘-’ )+

여기서 ()는 grouping, ?는 optional이라는 뜻이다.

OSGi도 major,minor,micro라는 세단계 숫자로된 버전을 가지고 있다. 문제는 그 다음 qualifier가 나오는 부분인데, 그 구분자가 점(.)으로 되어있다는 것이 대쉬(-)를 사용하는 Maven과 다르다.

또 OSGi의 qualifier는 micro버전까지 나온 뒤에만 적용할 수 있다. 즉 1.0.0.M1 이라고는 쓸 수 있지만 1.0.M1이라고는 사용할 수 없다는 뜻이다. 하지만 Maven은 구분자 자체를 별도로 해놨기 때문에 1.0-M1이라고 쓸 수 있다. 이 것이 각각의 qualifier를 위한 구분자를 다르게 사용한 이유인지도 모르겠다.

 

문제는 스프링소스가 제공하는 OSGi호환 번들의 버전은 OSGi 버전포맷을 따른다는 점이다. 이부분에서 Maven의 버전과 충돌이 일어난다. 물론 Maven의 나이브함 때문에 에러가 나지 않고 정상적으로 처리되는 듯 하나, 내부적으로 보자면 큰 차이가 있고 결국 버전처리에 혼란을 가져올 수 밖에 없다.

예를 들어 스프링의 번들을 기준으로 보자면

스프링소스의 리포지토리에서는 2.5.6과 2.5.6.A가 모두 제공된다. 여기서 qualifier A가 붙는 것은 패키징에 미묘한 수정이 있기 때문이다. 하지만 이 두개의 번들을 Maven에서는 완전히 다른 버전으로 인식한다.

2.5.6은 정상적으로 2,5,6의 세가지 버전을 가진 표준 포맷으로 보지만

2.5.6.A는 OSGi의 표준에 맞는 정확한 버전구조를 가졌지만 2.5.6 바로 뒤에 나올 수 있는 버전이 아니라 Maven에서 보기에는 0,0,0버전에 2.5.6.A라는 qualifier를 가진 버전으로 해석이 된다는 말이다. 현재 공식버전인 2.0.9를 포함해서 2.0.x의 최신 브랜치와 새로운 2.1.x의 브랜치의 Maven을 가져다 테스트해봐도 동일하다. 아직 alpha1인 3.0은 테스트 해보지 않았다.

결국 이부분이 이전에 지적한 Maven의 버전범위 비교방식으로 적용해보면 2.5.6.A가 2.5.6보다 훨신 옛날 버전이 되버린다.

 

버전 사용에 대한 주의

결론적으로 이러한 차이가 가져오는 문제점은 경우에 따라 심각한 결과 내지는 혼란을 초래할 수 있기 때문에 주의해야 한다. 특히 스프링이 제공하는 모듈과 OSGi 번들을 사용할 경우는 더욱 그렇다.

당연하게도 Maven 내부에서 이부분에 대한 문제제기와 어설픈 Maven의 버전체계를 정리하자는 요구가 지속적으로 나오고 있다. 당장에 OSGi와의 버전차이에 관한 문제나 빌드넘버 문제 등은 사용자들의 패치가 제공되는 등의 수정을 요구받고 있다. 하지만 적용되고 있지 않고 있다. 몰려가서 vote를 해야 할까.

이부분에 대한 근본적인 해결책은 Maven의 버전체계를 종합적으로 개선하는 것까지 가야 할 듯 하다. 이에 대해서 괴민을 많이 했던 한 개발자가 정리해놓은 Maven Versioning이라는 위키문서에 그런 내용이 잘 정리되어있다. Maven 사용자라면 주의 깊게 읽어볼만 하다.

Maven은 무려 3개의 브랜치(2.0.x, 2.1.x, 3.0.x)가 동시에 개발되고 있는 복잡한 프로젝트이다. 이런 저런 버그와 불편함으로 욕도 엄청나게 먹어왔다. 그래도 m2eclipse,nexus와 같은 쓸만한 툴의 개발을 지원하는 등을 보면 바른 방향으로 나아가고 있는듯 하다. 리포지토리 개념을 공유하는 Ant/Ivy와 Buildr같은 툴들도 등장했다.

이 Maven 버전문제 제대로 확인하겠다고 Maven을 수정해서 직접 빌드하고 테스트 하는등의 작업을 하면서 오전시간을 거의 날려버렸다. 부디 이 버전 문제만큼은 좀 빨리 해결되었으면 좋겠다. 마음 같아서는 위의 이슈에 올라온 패치를 적용해서 쓰고 싶기도하다. 다른 개발자들과 혼란이 생길테니 그럴 엄두는 못내겠지만.

 

이름은 참 좋은데…

ma·ven  n. 《미·속어》 숙달한 사람, 프로, 명수(expert) 

Related posts:

  1. Maven의 version range를 사용할 때 주의할 점
  2. Spring-OSGi 시작하기 – OSGi
  3. JCO컨퍼런스와 Spring Dynamic Modules for OSGi(tm)
  4. Spring Dynamic Modules for OSGi(tm) 한글 레퍼런스 자료
  5. SpringOne 2008 (1) – OSGi
  6. SpringDM과 차세대 OSGi
  7. Small Team의 기준 / OSGi-S2AP 그게 왜 필요한데?
  8. IBM DeveloperWorks – SpringDM for OSGi 스크린캐스트 첫번째 공개
  9. Maven 3.0과 버전 포맷 문제
  10. Spring 3.0 (4) – Maven에서 Spring 3.0 최신버전 사용하기
  11. Maven 다중 리포지토리와 버전 범위를 사용할 때의 주의점
  12. Spring 3.0 (34) R-941 스프링의 Maven 지원정책은?
  13. Spring 3.0 (1) 프로젝트 구조와 빌드 시스템의 변화
  14. Spring 3.0 (25) Spring 3.0 빌드, 배포, 모듈과 라이브러리의 의존관계 분석 그 이후
  15. Spring 3.0 (27) R-599 JDK1.5+ Concurrent

Facebook comments:

to “Maven과 OSGi(Spring)의 버전포맷 비호환 문제”

  1. Good – I should definitely pronounce, impressed with your web site. I had no trouble navigating through all tabs as well as related info ended up being truly simple to do to access. I recently found what I hoped for before you know it in the least. Quite unusual. Is likely to appreciate it for those who add forums or anything, website theme . a tones way for your customer to communicate. Nice task.

  2. I’ve been browsing online more than three hours today, yet I never discovered any fascinating article like yours. It is beautiful price enough for me. In my view, if all webmasters and bloggers made excellent content as you did, the net can be much more helpful than ever before. “No one has the right to destroy another person’s belief by demanding empirical evidence.” by Ann Landers.

  3. I’ve been surfing online more than 3 hours today, yet I never found any interesting article like yours. It is pretty worth enough for me. In my opinion, if all site owners and bloggers made good content as you did, the net will be a lot more useful than ever before.

  4. You said it very well.! provigil lawsuit

  5. I like what you guys are up too. Such clever work and reporting! Carry on the superb works guys I have incorporated you guys to my blogroll. I think it will improve the value of my website :) .

  6. I consider something genuinely interesting about your site so I saved to my bookmarks .

  7. Whoa a lot of good material. viagra for women

  8. Regards! Valuable information. viagra without a doctor prescription

  9. I need to to thank you for this excellent read!! I certainly enjoyed every little bit of it. I have you book marked to check out new stuff you post…

  10. You suggested that fantastically! cbd heroin addiction

  11. You’ve made your stand extremely nicely!! cialis generic Cialis Mode D Action pharmacie canadienne generic viagra online

  12. Regards. I value it! buy generic viagra

  13. You explained that exceptionally well. canada drugs

  14. Every as soon as inside a while we decide on blogs that we study. Listed below are the most current sites that we choose

  15. You actually stated it terrifically! canada viagra

  16. Info nicely applied!! viagra online

  17. Fantastic write ups. Regards. online pharmacies in usa modafinil vs adderall

  18. Nicely put. Kudos. hemp oil benefits

  19. Regards! Lots of material.
    viagra for sale uk

  20. Thanks a lot, Valuable stuff. trust pharmacy canada cialis 20 mg cialis viagra online

  21. Very well expressed really! . cialis 20 mg canadian pharmacies that ship to us

  22. I precisely had to say thanks once again. I am not sure what I would’ve done without the tips shared by you directly on such theme. It became the challenging concern for me personally, nevertheless taking a look at a new specialized fashion you handled that forced me to weep over happiness. I’m happier for this service and even pray you are aware of a powerful job you were undertaking training others by way of your webpage. Probably you have never come across all of us.

  23. the time to read or stop by the content or internet sites we have linked to beneath the

  24. Thanks for helping out, fantastic information.

  25. Seriously a good deal of terrific advice! glucophage xr 500

  26. Thanks, A good amount of information.
    azithromycin

  27. below you will locate the link to some sites that we assume you ought to visit

  28. Its excellent as your other posts : D, regards for putting up. “Love is like an hourglass, with the heart filling up as the brain empties.” by Jules Renard.

  29. I think this is one of the most significant info for me. And i’m glad reading your article. But wanna remark on few general things, The web site style is ideal, the articles is really excellent : D. Good job, cheers

  30. Absolutely composed content material, Really enjoyed looking through.

  31. Many thanks! Plenty of posts.
    lisinopril proscar medication hidroclorotiazida

  32. I’ve recently started a blog, the information you offer on this website has helped me tremendously. Thanks for all of your time & work. “Character is much easier kept than recovered.” by Thomas Paine.

  33. Useful knowledge. Appreciate it! retin-a cream

  34. Seriously many of great facts. finasteride generic celebrex

Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© 2017 Toby's Epril Suffusion theme by Sayontan Sinha