maven versions release candidates and snapshot

11,463

Maven version numbers are comprised as follows:

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

If all the version numbers are equal, the qualifier is compared alphabetically. "RC1" and "SNAPSHOT" and sorted no differently to "a" and "b". As a result, "SNAPSHOT" is considered newer because it is greater alphabetically. See this page as a reference.

Note that a.b.c-RC1-SNAPSHOT would be considered older than a.b.c-RC1.

I'm not sure what to suggest as a solution - this is just how Maven versioning works.

Share:
11,463

Related videos on Youtube

mirlitone
Author by

mirlitone

Updated on June 13, 2022

Comments

  • mirlitone
    mirlitone about 2 years

    My goal is to release a project which have a single dependency. I have a nexus repository where i deploy both snapshot and release versions.

    The one dependency I have has

    group:artifact:1.1.0-SNAPSHOT
    

    and the following Release Candidate is released in my nexus repo

    group:artifact:1.1.0-RC1
    

    when asking to the versions plugin to resolve the dependencies, it claims that no new dependency is available. So he consider that

    1.1.0-SNAPSHOT > 1.1.0-RC1
    

    However, If in my project, i have version 1.0.0-SNAPSHOT, version 1.1.0-RC1 is resolved as the newest version.

    What am I missing? (I looked into the plugin sources and we have the following snippet:

    String otherQualifier = otherVersion.getQualifier();
    
    if ( otherQualifier != null )
    {
      if ( ( qualifier.length() > otherQualifier.length() )
          && qualifier.startsWith( otherQualifier ) )
      {
        // here, the longer one that otherwise match is considered older
        result = -1;
      }
      else if ( ( qualifier.length() < otherQualifier.length() )
          && otherQualifier.startsWith( qualifier ) )
      {
        // here, the longer one that otherwise match is considered older
        result = 1;
      }
      else
      {
        result = qualifier.compareTo( otherQualifier );
      }
    }
    

    which seems buggy to me. Any idea?

  • Angel O'Sphere
    Angel O'Sphere about 7 years
    This is only half correct, as SNAPSHOT is a special qualifier which is handled by maven outside of the process you are describing. See: docs.oracle.com/middleware/1212/core/MAVEN/…
  • jmrah
    jmrah about 4 years
    This answer might have been correct at the time of writing, but the way Maven compares versions has been updated since around v3. More details here stackoverflow.com/questions/13004443/…