Module utilities

Class ComparableVersion

java.lang.Object
de.grogra.util.ComparableVersion
All Implemented Interfaces:
Comparable<ComparableVersion>

public class ComparableVersion extends Object implements Comparable<ComparableVersion>

Generic implementation of version comparison.

Features:

  • mixing of '-' (hyphen) and '.' (dot) separators,
  • transition between characters and digits also constitutes a separator: 1.0alpha1 => [1, [alpha, 1]]
  • unlimited number of version components,
  • version components in the text can be digits or strings,
  • strings are checked for well-known qualifiers and the qualifier ordering is used for version ordering. Well-known qualifiers (case insensitive) are:
    • alpha or a
    • beta or b
    • milestone or m
    • rc or cr
    • snapshot
    • (the empty string) or ga or final
    • sp
    Unknown qualifiers are considered after known qualifiers, with lexical order (always case insensitive),
  • a hyphen usually precedes a qualifier, and is always less important than digits/number, for example 1.0.RC2 < 1.0-RC3 < 1.0.1; but prefer 1.0.0-RC1 over 1.0.0.RC1, and more generally: 1.0.X2 < 1.0-X3 < 1.0.1 for any string X; but prefer 1.0.0-X1 over 1.0.0.X1.
See Also:
  • Constructor Details

    • ComparableVersion

      public ComparableVersion(String version)
  • Method Details

    • parseVersion

      public final void parseVersion(String version)
    • compareTo

      public int compareTo(ComparableVersion o)
      Specified by:
      compareTo in interface Comparable<ComparableVersion>
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getCanonical

      public String getCanonical()
    • equals

      public boolean equals(Object o)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • main

      public static void main(String... args)
      Main to test version parsing and comparison.

      To check how "1.2.7" compares to "1.2-SNAPSHOT", for example, you can issue

      java -jar ${maven.repo.local}/org/apache/maven/maven-artifact/${maven.version}/maven-artifact-${maven.version}.jar "1.2.7" "1.2-SNAPSHOT"
      command to command line. Result of given command will be something like this:
       Display parameters as parsed by Maven (in canonical form) and comparison result:
       1. 1.2.7 == 1.2.7
          1.2.7 > 1.2-SNAPSHOT
       2. 1.2-SNAPSHOT == 1.2-snapshot
       
      Parameters:
      args - the version strings to parse and compare. You can pass arbitrary number of version strings and always two adjacent will be compared.