in maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractMapVersionsPhase.java [209:300]
private String resolveNextVersion(
MavenProject project,
String projectId,
ReleaseDescriptor releaseDescriptor,
ReleaseEnvironment releaseEnvironment)
throws ReleaseExecutionException {
String defaultVersion;
if (convertToBranch) {
// no branch modification
if (!(releaseDescriptor.isUpdateBranchVersions()
&& (ArtifactUtils.isSnapshot(project.getVersion())
|| releaseDescriptor.isUpdateVersionsToSnapshot()))) {
return project.getVersion();
}
defaultVersion = getReleaseVersion(projectId, releaseDescriptor);
} else if (!convertToSnapshot) // map-release-version
{
defaultVersion = getReleaseVersion(projectId, releaseDescriptor);
} else if (releaseDescriptor.isBranchCreation()) {
// no working copy modification
if (!(ArtifactUtils.isSnapshot(project.getVersion()) && releaseDescriptor.isUpdateWorkingCopyVersions())) {
return project.getVersion();
}
defaultVersion = getDevelopmentVersion(projectId, releaseDescriptor);
} else {
// no working copy modification
if (!(releaseDescriptor.isUpdateWorkingCopyVersions())) {
return project.getVersion();
}
defaultVersion = getDevelopmentVersion(projectId, releaseDescriptor);
}
// @todo validate default version, maybe with DefaultArtifactVersion
String suggestedVersion = null;
String nextVersion = defaultVersion;
String messageFormat = null;
try {
while (nextVersion == null || ArtifactUtils.isSnapshot(nextVersion) != convertToSnapshot) {
if (suggestedVersion == null) {
String baseVersion = null;
if (convertToSnapshot) {
baseVersion = getReleaseVersion(projectId, releaseDescriptor);
}
// unspecified and unmapped version, so use project version
if (baseVersion == null) {
baseVersion = project.getVersion();
}
try {
try {
suggestedVersion =
resolveSuggestedVersion(baseVersion, releaseDescriptor, releaseEnvironment);
} catch (VersionParseException e) {
if (releaseDescriptor.isInteractive()) {
suggestedVersion =
resolveSuggestedVersion("1.0", releaseDescriptor, releaseEnvironment);
} else {
throw new ReleaseExecutionException(
"Error parsing version, cannot determine next " + "version: " + e.getMessage(),
e);
}
}
} catch (PolicyException | VersionParseException e) {
throw new ReleaseExecutionException(e.getMessage(), e);
}
}
if (releaseDescriptor.isInteractive()) {
if (messageFormat == null) {
messageFormat = "What is the " + getContextString(releaseDescriptor) + " version for \"%s\"? ("
+ buffer().project("%s") + ")";
}
String message = String.format(messageFormat, project.getName(), project.getArtifactId());
nextVersion = prompter.prompt(message, suggestedVersion);
// @todo validate next version, maybe with DefaultArtifactVersion
} else if (defaultVersion == null) {
nextVersion = suggestedVersion;
} else if (convertToSnapshot) {
throw new ReleaseExecutionException(defaultVersion + " is invalid, expected a snapshot");
} else {
throw new ReleaseExecutionException(defaultVersion + " is invalid, expected a non-snapshot");
}
}
} catch (PrompterException e) {
throw new ReleaseExecutionException("Error reading version from input handler: " + e.getMessage(), e);
}
return nextVersion;
}