Skip to content

Commit cb9135b

Browse files
committed
Align GraphQL Java version with dependency from spring-graphql
Closes gh-41315
1 parent 262a5c1 commit cb9135b

File tree

2 files changed

+65
-22
lines changed
  • buildSrc/src/main/java/org/springframework/boot/build/bom
  • spring-boot-project/spring-boot-dependencies

2 files changed

+65
-22
lines changed

buildSrc/src/main/java/org/springframework/boot/build/bom/Library.java

Lines changed: 60 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import org.gradle.api.Project;
3131
import org.gradle.api.artifacts.Configuration;
3232
import org.gradle.api.artifacts.Dependency;
33-
import org.gradle.api.artifacts.dsl.DependencyHandler;
3433
import org.gradle.api.artifacts.result.DependencyResult;
3534

3635
import org.springframework.boot.build.bom.bomr.version.DependencyVersion;
@@ -334,17 +333,10 @@ public static class VersionAlignment {
334333
}
335334

336335
public Set<String> resolve() {
337-
if (this.managedBy == null) {
338-
throw new IllegalStateException("Version alignment without managedBy is not supported");
339-
}
340336
if (this.alignedVersions != null) {
341337
return this.alignedVersions;
342338
}
343-
Library managingLibrary = this.libraries.stream()
344-
.filter((candidate) -> this.managedBy.equals(candidate.getName()))
345-
.findFirst()
346-
.orElseThrow(() -> new IllegalStateException("Managing library '" + this.managedBy + "' not found."));
347-
Map<String, String> versions = resolveAligningDependencies(managingLibrary);
339+
Map<String, String> versions = resolveAligningDependencies();
348340
Set<String> versionsInLibrary = new HashSet<>();
349341
for (Group group : this.groups) {
350342
for (Module module : group.getModules()) {
@@ -364,18 +356,8 @@ public Set<String> resolve() {
364356
return this.alignedVersions;
365357
}
366358

367-
private Map<String, String> resolveAligningDependencies(Library manager) {
368-
DependencyHandler dependencyHandler = this.project.getDependencies();
369-
List<Dependency> boms = manager.getGroups()
370-
.stream()
371-
.flatMap((group) -> group.getBoms()
372-
.stream()
373-
.map((bom) -> dependencyHandler
374-
.platform(group.getId() + ":" + bom + ":" + manager.getVersion().getVersion())))
375-
.toList();
376-
List<Dependency> dependencies = new ArrayList<>();
377-
dependencies.addAll(boms);
378-
dependencies.add(dependencyHandler.create(this.from));
359+
private Map<String, String> resolveAligningDependencies() {
360+
List<Dependency> dependencies = getAligningDependencies();
379361
Configuration alignmentConfiguration = this.project.getConfigurations()
380362
.detachedConfiguration(dependencies.toArray(new Dependency[0]));
381363
Map<String, String> versions = new HashMap<>();
@@ -388,6 +370,58 @@ private Map<String, String> resolveAligningDependencies(Library manager) {
388370
return versions;
389371
}
390372

373+
private List<Dependency> getAligningDependencies() {
374+
if (this.managedBy == null) {
375+
Library fromLibrary = findFromLibrary();
376+
return List
377+
.of(this.project.getDependencies().create(this.from + ":" + fromLibrary.getVersion().getVersion()));
378+
}
379+
else {
380+
Library managingLibrary = findManagingLibrary();
381+
List<Dependency> boms = getBomDependencies(managingLibrary);
382+
List<Dependency> dependencies = new ArrayList<>();
383+
dependencies.addAll(boms);
384+
dependencies.add(this.project.getDependencies().create(this.from));
385+
return dependencies;
386+
}
387+
}
388+
389+
private Library findFromLibrary() {
390+
for (Library library : this.libraries) {
391+
for (Group group : library.getGroups()) {
392+
for (Module module : group.getModules()) {
393+
if (this.from.equals(group.getId() + ":" + module.getName())) {
394+
return library;
395+
}
396+
}
397+
}
398+
}
399+
return null;
400+
}
401+
402+
private Library findManagingLibrary() {
403+
if (this.managedBy == null) {
404+
return null;
405+
}
406+
return this.libraries.stream()
407+
.filter((candidate) -> this.managedBy.equals(candidate.getName()))
408+
.findFirst()
409+
.orElseThrow(() -> new IllegalStateException("Managing library '" + this.managedBy + "' not found."));
410+
}
411+
412+
private List<Dependency> getBomDependencies(Library manager) {
413+
if (manager == null) {
414+
return Collections.emptyList();
415+
}
416+
return manager.getGroups()
417+
.stream()
418+
.flatMap((group) -> group.getBoms()
419+
.stream()
420+
.map((bom) -> this.project.getDependencies()
421+
.platform(group.getId() + ":" + bom + ":" + manager.getVersion().getVersion())))
422+
.toList();
423+
}
424+
391425
String getFrom() {
392426
return this.from;
393427
}
@@ -398,7 +432,11 @@ String getManagedBy() {
398432

399433
@Override
400434
public String toString() {
401-
return "version from dependencies of " + this.from + " that is managed by " + this.managedBy;
435+
String result = "version from dependencies of " + this.from;
436+
if (this.managedBy != null) {
437+
result += " that is managed by " + this.managedBy;
438+
}
439+
return result;
402440
}
403441

404442
}

spring-boot-project/spring-boot-dependencies/build.gradle

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,11 @@ bom {
333333
startsWith(["2018-", "2019-", "2020-", "2021-", "230521-"])
334334
because "These are snapshots that we don't want to see"
335335
}
336+
alignWith {
337+
version {
338+
from "org.springframework.graphql:spring-graphql"
339+
}
340+
}
336341
group("com.graphql-java") {
337342
modules = [
338343
"graphql-java"

0 commit comments

Comments
 (0)