in maven-release-api/src/main/java/org/apache/maven/shared/release/versions/Version.java [123:166]
public Version(String version) throws VersionParseException {
this.strVersion = version;
this.aetherVersion = new AetherVersion(version);
this.mavenArtifactVersion = new MavenArtifactVersion(version);
// FIX for non-digit release numbers, e.g. trunk-SNAPSHOT or just SNAPSHOT
Matcher matcher = ALTERNATE_PATTERN.matcher(strVersion);
// TODO: hack because it didn't support "SNAPSHOT"
if (matcher.matches()) {
annotation = null;
digits = null;
buildSpecifier = version;
buildSeparator = null;
return;
}
Matcher m = STANDARD_PATTERN.matcher(strVersion);
if (m.matches()) {
digits = parseDigits(m.group(DIGITS_INDEX));
if (!SNAPSHOT_IDENTIFIER.equals(m.group(ANNOTATION_INDEX))) {
annotationSeparator = m.group(ANNOTATION_SEPARATOR_INDEX);
annotation = nullIfEmpty(m.group(ANNOTATION_INDEX));
if (StringUtils.isNotEmpty(m.group(ANNOTATION_REV_SEPARATOR_INDEX))
&& StringUtils.isEmpty(m.group(ANNOTATION_REVISION_INDEX))) {
// The build separator was picked up as the annotation revision separator
buildSeparator = m.group(ANNOTATION_REV_SEPARATOR_INDEX);
buildSpecifier = nullIfEmpty(m.group(BUILD_SPECIFIER_INDEX));
} else {
annotationRevSeparator = m.group(ANNOTATION_REV_SEPARATOR_INDEX);
annotationRevision = nullIfEmpty(m.group(ANNOTATION_REVISION_INDEX));
buildSeparator = m.group(BUILD_SEPARATOR_INDEX);
buildSpecifier = nullIfEmpty(m.group(BUILD_SPECIFIER_INDEX));
}
} else {
// Annotation was "SNAPSHOT" so populate the build specifier with that data
buildSeparator = m.group(ANNOTATION_SEPARATOR_INDEX);
buildSpecifier = nullIfEmpty(m.group(ANNOTATION_INDEX));
}
} else {
throw new VersionParseException("Unable to parse the version string: \"" + version + "\"");
}
}