[ 
https://issues.apache.org/jira/browse/MNG-7700?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17691213#comment-17691213
 ] 

Elliotte Rusty Harold commented on MNG-7700:
--------------------------------------------

https://maven.apache.org/pom.html#version-order-specification are the canonical 
rules Maven should follow. This explicitly states that

".qualifier" = "-qualifier" < "-number" < ".number"

Thus `1.x` is indeed equal to `1-x` when comparing versions. 

The 0.x and 0.rc cases are probably indeed wrong in the current code. The spec 
says "Then, starting from the end of the version, the trailing "null" values 
(0, "", "final", "ga") are trimmed. This process is repeated at each remaining 
hyphen from end to start."

0-x looks tricky. I suppose it depends on the definition of "trailing"



> Improper canonicalization of versions
> -------------------------------------
>
>                 Key: MNG-7700
>                 URL: https://issues.apache.org/jira/browse/MNG-7700
>             Project: Maven
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 3.8.7, 3.9.0
>            Reporter: David M. Lloyd
>            Priority: Major
>             Fix For: 3.8.x-candidate, 3.9.1-candidate, waiting-for-feedback
>
>
> The canonicalization logic for versions is incorrect.
> Using the method {{ComparableVersion#getCanonical}} as in {{new 
> ComparableVersion(input).getCanonical()}}, the following results can be 
> observed:
> ||Input||3.8.6 Output||3.8.6 OK?||3.9.0 Output||3.9.0 OK?||
> |{{1}}|{{1}}|yes|{{1}}|yes|
> |{{0.1}}|{{0.1}}|yes|{{0.1}}|yes|
> |{{0-1}}|{{1}}|no|{{1}}|no|
> |{{1.x}}|{{1.x}}|yes|{{1-x}}|maybe*|
> |{{1-x}}|{{1-x}}|yes|{{1-x}}|yes|
> |{{0.x}}|{{0.x}}|yes|{{x}}|no|
> |{{0-x}}|{{x}}|no|{{x}}|no|
> |{{x}}|{{x}}|yes|{{x}}|yes|
> |{{0.rc}}|{{0.rc}}|yes|{{rc}}|no|
> The "OK?" columns indicate whether parsing the canonical version string will 
> yield a {{ComparableVersion}} instance that is {{equal}} to one constructed 
> from the original input, i.e. it's internally consistent.
> The "maybe*" item indicates that starting with 3.9.0, version `1.x` is now 
> considered to be equal to `1-x`. I'm not sure if this is a bug or not, or was 
> intentional or not, but it is definitely a change.
> These canonicalizations seem to have gotten less consistent in the move to 
> 3.9.0.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to