[ https://jira.codehaus.org/browse/MNG-5332?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Michael Osipov updated MNG-5332: -------------------------------- Affects Version/s: (was: 3.1.x) 3.2.x > Custom version scheme > --------------------- > > Key: MNG-5332 > URL: https://jira.codehaus.org/browse/MNG-5332 > Project: Maven > Issue Type: New Feature > Components: POM > Affects Versions: 3.2.x > Reporter: Markus KARG > > To be able to always find the latest bug fix (and for other use cases) Maven > supports version ranges. To be able to correctly detected whether a version > is in the range, or what the latest version of the detected version is, Maven > has to know the meaning of each part of the version. Maven currently is able > to deal with versions in the following syntax: Major.Minor.Build-Qualifier, > where Major, Minor and Build must be Integers, and Qualifier can be a String. > Major, Minor and Build will identify ascending post-GA versions, a qualifier > always will mark a version as pre-GA. So far, so good. > Unfortunatley, there are lots of other versioning syntaxes, like the rather > propular OSGi variant Major.Minor.Build.Qualifier where the Qualifier also is > found in POST-GA variants, and is separated by a dot. > As more and more OSGi artefacts are uploaded to Maven Central (like e. g. the > rather popular Hibernate suite), and as Maven users want to have such > artefacts as dependencies (while still using version ranges), the Maven range > resolver has to learn to deal with different version syntax. > My proposal is: Adding another POM element that teaches Maven what the patten > of a version is made of, and how to treat the qualifier. The idea is not yet > perfectly thought to the end, but shall trigger a discussion about a final > solution. > In the "foreign" (e. g. OSGi) artefact's POM, the following could be defined > to teach Maven (and all Maven related tools like Nexus) how to deal with > "non-mavenized" versions: > <version>4.5.6.Final</version> > <versionSyntax>[major(int,asc)].[minor(int,asc)].[build(int,asc)].[qualifier(resolve)]</versionSyntax> > <versionQualifierResolution> > <preGA>Alpha*, Beta*</preGA> > <postGA>SR*</postGA> > <GA>Final</GA> > </versionQualifierResolution> > This example defines the OSGi versioning scheme in a structured way so that > Maven will learn how to treat it: <version/> contains a version number in > OSGi syntax, so all artefacts will keep it (otherwise it won't work in OSGi > anymore). <versionSyntax> defines that the version is made up of four > dot-separated pieces. To make clear what is a piece and what is a literal, > pieces are [bracketed]. As Maven needs to find major, minor, build and > qualifier, these names are static and identify the position of that piece in > the pattern. "int" means "integer sorting rules". "str" means "string sorting > rules". "asc" and "desc" mean the sorting direction. "resolve" means that the > qualifier is not to be sorted, but to be resolved using the given table. In > that table, "pre" identifies the qualifiers that will mark the version number > as "pre GA" (= prior to the given version). Other possible values are "post > GA" (= past to the given version) and "GA" (= the qualifier does not further > modify the given version). > An alternative approach could be using reg ex instead of this new fancy > syntax, but then we have to define sorting and data type in a different way > in the POM. > Please share your opinion! It is clear that OSGi enforces Maven to react in > some way. So here is my proposal. What do you think? -- This message was sent by Atlassian JIRA (v6.1.6#6162)