diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/InteractiveUpgradeResolver.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/InteractiveUpgradeResolver.java index 1148a773de6..60fda51b6c3 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/InteractiveUpgradeResolver.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/InteractiveUpgradeResolver.java @@ -23,10 +23,13 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Set; import org.gradle.api.internal.tasks.userinput.UserInputHandler; import org.springframework.boot.build.bom.Library; +import org.springframework.boot.build.bom.Library.VersionAlignment; +import org.springframework.boot.build.bom.bomr.version.DependencyVersion; /** * Interactive {@link UpgradeResolver} that uses command line input to choose the upgrades @@ -69,11 +72,23 @@ public final class InteractiveUpgradeResolver implements UpgradeResolver { if (versionOptions.isEmpty()) { return null; } - VersionOption defaultOption = new VersionOption(library.getVersion().getVersion()); + VersionOption defaultOption = defaultOption(library); VersionOption selected = selectOption(defaultOption, library, versionOptions); return (selected.equals(defaultOption)) ? null : selected.upgrade(library); } + private VersionOption defaultOption(Library library) { + VersionAlignment alignment = library.getVersionAlignment(); + Set alignedVersions = (alignment != null) ? alignment.resolve() : null; + if (alignedVersions != null && alignedVersions.size() == 1) { + DependencyVersion alignedVersion = DependencyVersion.parse(alignedVersions.iterator().next()); + if (alignedVersion.equals(library.getVersion().getVersion())) { + return new VersionOption.AlignedVersionOption(alignedVersion, alignment); + } + } + return new VersionOption(library.getVersion().getVersion()); + } + private VersionOption selectOption(VersionOption defaultOption, Library library, List versionOptions) { VersionOption selected = this.userInputHandler.askUser((questions) -> { diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/StandardLibraryUpdateResolver.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/StandardLibraryUpdateResolver.java index e6812e95095..03e2b42bc72 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/StandardLibraryUpdateResolver.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/StandardLibraryUpdateResolver.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -77,8 +77,17 @@ class StandardLibraryUpdateResolver implements LibraryUpdateResolver { } protected List getVersionOptions(Library library) { - VersionOption option = determineAlignedVersionOption(library); - return (option != null) ? List.of(option) : determineResolvedVersionOptions(library); + List options = new ArrayList<>(); + VersionOption alignedOption = determineAlignedVersionOption(library); + if (alignedOption != null) { + options.add(alignedOption); + } + for (VersionOption resolvedOption : determineResolvedVersionOptions(library)) { + if (alignedOption == null || !alignedOption.getVersion().equals(resolvedOption.getVersion())) { + options.add(resolvedOption); + } + } + return options; } private VersionOption determineAlignedVersionOption(Library library) {