in indexer-core/src/main/java/org/apache/maven/index/artifact/M2GavCalculator.java [176:266]
private Gav getSnapshotGav(
String s,
int vEndPos,
String groupId,
String artifactId,
String version,
String fileName,
boolean checksum,
boolean signature,
Gav.HashType checksumType,
Gav.SignatureType signatureType) {
Integer snapshotBuildNo = null;
Long snapshotTimestamp = null;
int vSnapshotStart = vEndPos + artifactId.length() + version.length() - 9 + 3;
String vSnapshot = s.substring(vSnapshotStart, vSnapshotStart + 8);
String classifier;
String ext;
if ("SNAPSHOT".equals(vSnapshot)) {
int nTailPos = vEndPos + artifactId.length() + version.length() + 2;
String tail = s.substring(nTailPos);
int nExtPos = tail.indexOf('.');
if (nExtPos == -1) {
// NX-563: not allowing extensionless paths to be interpreted as artifact
return null;
}
ext = tail.substring(nExtPos + 1);
classifier = tail.charAt(0) == '-' ? tail.substring(1, nExtPos) : null;
} else {
StringBuilder sb = new StringBuilder(vSnapshot);
sb.append(s, vSnapshotStart + sb.length(), vSnapshotStart + sb.length() + 8);
try {
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd.HHmmss");
snapshotTimestamp = df.parse(sb.toString()).getTime();
} catch (ParseException e) {
}
int buildNumberPos = vSnapshotStart + sb.length();
StringBuilder bnr = new StringBuilder();
while (s.charAt(buildNumberPos) >= '0' && s.charAt(buildNumberPos) <= '9') {
sb.append(s.charAt(buildNumberPos));
bnr.append(s.charAt(buildNumberPos));
buildNumberPos++;
}
String snapshotBuildNumber = sb.toString();
snapshotBuildNo = Integer.parseInt(bnr.toString());
int n = version.length() > 9 ? version.length() - 9 + 1 : 0;
String tail = s.substring(vEndPos + artifactId.length() + n + snapshotBuildNumber.length() + 2);
int nExtPos = tail.indexOf('.');
if (nExtPos == -1) {
// NX-563: not allowing extensionless paths to be interpreted as artifact
return null;
}
ext = tail.substring(nExtPos + 1);
classifier = tail.charAt(0) == '-' ? tail.substring(1, nExtPos) : null;
version = version.substring(0, version.length() - 8) + snapshotBuildNumber;
}
return new Gav(
groupId,
artifactId,
version,
classifier,
ext,
snapshotBuildNo,
snapshotTimestamp,
fileName,
checksum,
checksumType,
signature,
signatureType);
}