[ 
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)

Reply via email to