Maven
  1. Maven
  2. MNG-3046

DefaultArtifactVersion compareTo misbehaves regarding buildNumber 0

    Details

    • Patch Submitted:
      Yes
    • Number of attachments :
      1

      Description

      The implementation of Comparable.compareTo(Object) is faulty regarding the handling of version numbers where a build number is present but zero. Here's a unit test to demonstrate:

      DefaultArtifactVersion v1 = new DefaultArtifactVersion("2.0");
      DefaultArtifactVersion v2 = new DefaultArtifactVersion("2.0-0");
      DefaultArtifactVersion v3 = new DefaultArtifactVersion("2.0-alpha1");

      // v1 and v2 are equal
      assertTrue( v1.compareTo(v2) == 0 );
      assertTrue( v2.compareTo(v1) == 0 );

      // v1 is newer than v3
      assertTrue( v1.compareTo(v3) > 0 );
      assertTrue( v3.compareTo(v1) < 0 );

      // ergo, v2 should also be newer than v3
      assertTrue( v2.compareTo(v3) > 0 ); // FAILS!! returns 0 (equal)
      assertTrue( v3.compareTo(v1) < 0 ); // succeeds

      This test demonstrates this behavior violates symmetry and transitivity.

      Luckily, the fix is easy. A small change to the compareTo method to consider qualifiers before build numbers relieves this issue. I have a patch that I'll submit as soon as I have the issue number.

        Issue Links

          Activity

          Hide
          David Julian added a comment -

          This patch modifies:

          org.apache.maven.artifact.versioning.DefaultArtifactVersion
          org.apache.maven.artifact.versioning.DefaultArtifactVersionTest

          I followed the instructions on creating the patch here: http://maven.apache.org/guides/development/guide-m2-development.html#Creating%20and%20submitting%20a%20patch

          Show
          David Julian added a comment - This patch modifies: org.apache.maven.artifact.versioning.DefaultArtifactVersion org.apache.maven.artifact.versioning.DefaultArtifactVersionTest I followed the instructions on creating the patch here: http://maven.apache.org/guides/development/guide-m2-development.html#Creating%20and%20submitting%20a%20patch
          Hide
          John Casey added a comment -

          Applied, thanks.

          Show
          John Casey added a comment - Applied, thanks.

            People

            • Assignee:
              John Casey
              Reporter:
              David Julian
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: