Update maven version to use maven standard
Maven version spec to be implemented: https://maven.apache.org/pom.html#version-order-specification
https://github.com/apache/maven/blob/master/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java
Example ordering new ComparableVersion("NotAVersionSting"), new ComparableVersion("1.0a1-SNAPSHOT"), new ComparableVersion("1.0-alpha1"), new ComparableVersion("1.0beta1-SNAPSHOT"), new ComparableVersion("1.0-b2"), new ComparableVersion("1.0-beta3.SNAPSHOT"), new ComparableVersion("1.0-beta3"), new ComparableVersion("1.0-milestone1-SNAPSHOT"), new ComparableVersion("1.0-m2"), new ComparableVersion("1.0-rc1-SNAPSHOT"), new ComparableVersion("1.0-cr1"), new ComparableVersion("1.0-SNAPSHOT"), new ComparableVersion("1.0"), new ComparableVersion("1.0-sp"), new ComparableVersion("1.0-a"), new ComparableVersion("1.0-RELEASE"), new ComparableVersion("1.0-whatever"), new ComparableVersion("1.0.z"), new ComparableVersion("1.0.1"), new ComparableVersion("1.0.1.0.0.0.0.0.0.0.0.0.0.0.1")
Equal versions assertEquals(new ComparableVersion("1.0-alpha1"), new ComparableVersion("1.0-a1")); assertEquals(new ComparableVersion("1.0-beta1"), new ComparableVersion("1.0-b1")); assertEquals(new ComparableVersion("1.0-milestone1"), new ComparableVersion("1.0-m1")); assertEquals(new ComparableVersion("1.0-rc1"), new ComparableVersion("1.0-cr1"));
assertEquals(new ComparableVersion("1.0-ga"), new ComparableVersion("1.0")); assertEquals(new ComparableVersion("1.0-final"), new ComparableVersion("1.0"));
All qualifiers are case insensitive, as this test demonstrates:
assertEquals(new ComparableVersion("1.0ALPHA1"), new ComparableVersion("1.0-a1"));
assertEquals(new ComparableVersion("1.0Alpha1"), new ComparableVersion("1.0-a1"));
assertEquals(new ComparableVersion("1.0AlphA1"), new ComparableVersion("1.0-a1"));
assertEquals(new ComparableVersion("1.0BETA1"), new ComparableVersion("1.0-b1"));
assertEquals(new ComparableVersion("1.0MILESTONE1"), new ComparableVersion("1.0-m1"));
assertEquals(new ComparableVersion("1.0RC1"), new ComparableVersion("1.0-cr1"));
assertEquals(new ComparableVersion("1.0GA"), new ComparableVersion("1.0"));
assertEquals(new ComparableVersion("1.0FINAL"), new ComparableVersion("1.0"));
assertEquals(new ComparableVersion("1.0-SNAPSHOT"), new ComparableVersion("1-snapshot"));
Where version strings can not be parsed as major.minor.patch.build and the qualifier is not recognized, the entire string is considered a qualifier. These qualifiers are then compared as case insensitive strings:
assertTrue(new ComparableVersion("SomeRandomVersionOne").compareTo(
new ComparableVersion("SOMERANDOMVERSIONTWO")) < 0);
assertTrue(new ComparableVersion("SomeRandomVersionThree").compareTo(
new ComparableVersion("SOMERANDOMVERSIONTWO")) < 0);