From 52a276754a44f0156c78d8d33fb6e5daf7b741c7 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 17 Sep 2026 10:10:32 -0700 Subject: [PATCH] Try alternative URLs in checkLinks See gh-51790 --- .../boot/build/bom/CheckLinks.java | 40 +++++++++++++------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/CheckLinks.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/CheckLinks.java index 6083494c2d6..730c7805916 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/bom/CheckLinks.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/CheckLinks.java @@ -16,6 +16,10 @@ package org.springframework.boot.build.bom; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + import javax.inject.Inject; import org.apache.hc.client5.http.config.RequestConfig; @@ -49,6 +53,8 @@ public abstract class CheckLinks extends DefaultTask { private static final ErrorHandler NOOP_ERROR_HANDLER = (request, response) -> { }; + private static final List URL_ALTERNATIVES = List.of("index.html", "module-summary.html"); + private final BomExtension bom; @Inject @@ -87,19 +93,29 @@ public abstract class CheckLinks extends DefaultTask { private void check(RestClient restClient, LinkType type, Link link, String name, Object version) { String url = link.url(new LinkedVersion(version)); - int statusCode = restClient.head().uri(url).retrieve().toEntity(String.class).getStatusCode().value(); - if (statusCode != 200) { - int altStatusCode = restClient.head() - .uri(url + "/'") - .retrieve() - .toEntity(String.class) - .getStatusCode() - .value(); - if (altStatusCode == 200) { - statusCode = 200; - } - } + int statusCode = getStatusCode(restClient, url); System.out.printf("[%3d] %s - %s (%s)%n", statusCode, name, type, url); } + private int getStatusCode(RestClient restClient, String url) { + Set urls = new LinkedHashSet<>(); + urls.add(url); + if (!url.endsWith("/")) { + url = url + "/"; + urls.add(url); + } + for (String alternative : URL_ALTERNATIVES) { + urls.add(url + alternative); + } + Integer firstStatusCode = null; + for (String candidate : urls) { + int statusCode = restClient.head().uri(candidate).retrieve().toEntity(String.class).getStatusCode().value(); + if (statusCode == 200) { + return statusCode; + } + firstStatusCode = (firstStatusCode != null) ? firstStatusCode : statusCode; + } + return firstStatusCode; + } + }