Class GenericVersionScheme

java.lang.Object
org.eclipse.aether.util.version.GenericVersionScheme
All Implemented Interfaces:
VersionScheme

public class GenericVersionScheme extends Object
A version scheme using a generic version syntax and common sense sorting.

This scheme accepts versions of any form, interpreting a version as a sequence of numeric and alphabetic segments. The characters '-', '_', and '.' as well as the mere transitions from digit to letter and vice versa delimit the version segments. Delimiters are treated as equivalent.

Numeric segments are compared mathematically, alphabetic segments are compared lexicographically and case-insensitively. However, the following qualifier strings are recognized and treated specially: "alpha" = "a" < "beta" = "b" < "milestone" = "m" < "cr" = "rc" < "snapshot" < "final" = "ga" < "sp". All of those well-known qualifiers are considered smaller/older than other strings. An empty segment/string is equivalent to 0.

In addition to the above mentioned qualifiers, the tokens "min" and "max" may be used as final version segment to denote the smallest/greatest version having a given prefix. For example, "1.2.min" denotes the smallest version in the 1.2 line, "1.2.max" denotes the greatest version in the 1.2 line. A version range of the form "[M.N.*]" is short for "[M.N.min, M.N.max]".

Numbers and strings are considered incomparable against each other. Where version segments of different kind would collide, comparison will instead assume that the previous segments are padded with trailing 0 or "ga" segments, respectively, until the kind mismatch is resolved, e.g. "1-alpha" = "1.0.0-alpha" < "1.0.1-ga" = "1.0.1".

  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    static void
    main(String... args)
    A handy main method that behaves similarly like maven-artifact ComparableVersion is, to make possible test and possibly compare differences between the two.
    org.eclipse.aether.util.version.GenericVersion
    Parses the specified version string, for example "1.0".
    org.eclipse.aether.util.version.GenericVersionConstraint
    Parses the specified version constraint specification, for example "1.0" or "[1.0,2.0),(2.0,)".
    org.eclipse.aether.util.version.GenericVersionRange
    Parses the specified version range specification, for example "[1.0,2.0)".

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

  • Method Details

    • parseVersion

      public org.eclipse.aether.util.version.GenericVersion parseVersion(String version) throws InvalidVersionSpecificationException
      Description copied from interface: VersionScheme
      Parses the specified version string, for example "1.0".
      Parameters:
      version - The version string to parse, must not be null.
      Returns:
      The parsed version, never null.
      Throws:
      InvalidVersionSpecificationException - If the string violates the syntax rules of this scheme.
    • main

      public static void main(String... args)
      A handy main method that behaves similarly like maven-artifact ComparableVersion is, to make possible test and possibly compare differences between the two.

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

      jbang --main=org.eclipse.aether.util.version.GenericVersionScheme org.apache.maven.resolver:maven-resolver-util:1.9.18 "1.2.7" "1.2-SNAPSHOT"
      command to command line, output is very similar to that of ComparableVersion on purpose.
    • parseVersionRange

      public org.eclipse.aether.util.version.GenericVersionRange parseVersionRange(String range) throws InvalidVersionSpecificationException
      Description copied from interface: VersionScheme
      Parses the specified version range specification, for example "[1.0,2.0)".
      Specified by:
      parseVersionRange in interface VersionScheme
      Parameters:
      range - The range specification to parse, must not be null.
      Returns:
      The parsed version range, never null.
      Throws:
      InvalidVersionSpecificationException - If the range specification violates the syntax rules of this scheme.
    • parseVersionConstraint

      public org.eclipse.aether.util.version.GenericVersionConstraint parseVersionConstraint(String constraint) throws InvalidVersionSpecificationException
      Description copied from interface: VersionScheme
      Parses the specified version constraint specification, for example "1.0" or "[1.0,2.0),(2.0,)".
      Specified by:
      parseVersionConstraint in interface VersionScheme
      Parameters:
      constraint - The constraint specification to parse, must not be null.
      Returns:
      The parsed version constraint, never null.
      Throws:
      InvalidVersionSpecificationException - If the constraint specification violates the syntax rules of this scheme.