Skip to content

Commit

Permalink
Backport upgrade to Gradle 8.10.1
Browse files Browse the repository at this point in the history
Cherry-pick commits d756bf4, 083ac67 and 162c929 to
upgrade to Gradle 8.10.1.

Closes gh-42433
  • Loading branch information
philwebb committed Sep 24, 2024
1 parent 23ddad1 commit eafe61c
Show file tree
Hide file tree
Showing 23 changed files with 129 additions and 104 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ jobs:
- version: 17
toolchain: false
- version: 21
toolchain: true
toolchain: false
- version: 22
toolchain: true
toolchain: false
- version: 23
toolchain: true
exclude:
Expand Down
8 changes: 6 additions & 2 deletions buildSrc/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,11 @@ repositories {
gradlePluginPortal()
}

sourceCompatibility = 17
targetCompatibility = 17
java {
sourceCompatibility = 17
targetCompatibility = 17
}


if ("${springFrameworkVersion}".contains("-")) {
repositories {
Expand All @@ -34,6 +37,7 @@ dependencies {
implementation("com.tngtech.archunit:archunit:1.3.0")
implementation("commons-codec:commons-codec:${commonsCodecVersion}")
implementation("de.undercouch.download:de.undercouch.download.gradle.plugin:5.5.0")
implementation("dev.adamko.dokkatoo:dokkatoo-plugin:2.3.1")
implementation("io.spring.javaformat:spring-javaformat-gradle-plugin:${javaFormatVersion}")
implementation("org.apache.maven:maven-embedder:${mavenVersion}")
implementation("org.asciidoctor:asciidoctor-gradle-jvm:4.0.2")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,15 @@

package org.springframework.boot.build;

import java.net.URI;
import java.util.ArrayList;
import java.util.List;

import dev.adamko.dokkatoo.DokkatooExtension;
import dev.adamko.dokkatoo.formats.DokkatooHtmlPlugin;
import org.gradle.api.Project;
import org.gradle.api.tasks.SourceSet;
import org.gradle.api.tasks.SourceSetContainer;
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions;
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile;

Expand All @@ -44,9 +49,10 @@
class KotlinConventions {

void apply(Project project) {
project.getPlugins()
.withId("org.jetbrains.kotlin.jvm",
(plugin) -> project.getTasks().withType(KotlinCompile.class, this::configure));
project.getPlugins().withId("org.jetbrains.kotlin.jvm", (plugin) -> {
project.getTasks().withType(KotlinCompile.class, this::configure);
project.getPlugins().withType(DokkatooHtmlPlugin.class, (dokkatooPlugin) -> configureDokkatoo(project));
});
}

private void configure(KotlinCompile compile) {
Expand All @@ -60,4 +66,26 @@ private void configure(KotlinCompile compile) {
compile.getKotlinOptions().setFreeCompilerArgs(freeCompilerArgs);
}

private void configureDokkatoo(Project project) {
DokkatooExtension dokkatoo = project.getExtensions().getByType(DokkatooExtension.class);
dokkatoo.getDokkatooSourceSets().named(SourceSet.MAIN_SOURCE_SET_NAME).configure((sourceSet) -> {
sourceSet.getSourceRoots().setFrom(project.file("src/main/kotlin"));
sourceSet.getClasspath()
.from(project.getExtensions()
.getByType(SourceSetContainer.class)
.getByName(SourceSet.MAIN_SOURCE_SET_NAME)
.getOutput());
sourceSet.getExternalDocumentationLinks().create("spring-boot-javadoc", (link) -> {
link.getUrl().set(URI.create("https://docs.spring.io/spring-boot/api/java/"));
link.getPackageListUrl().set(URI.create("https://docs.spring.io/spring-boot/api/java/element-list"));
});
sourceSet.getExternalDocumentationLinks().create("spring-framework-javadoc", (link) -> {
String url = "https://docs.spring.io/spring-framework/docs/%s/javadoc-api/"
.formatted(project.property("springFrameworkVersion"));
link.getUrl().set(URI.create(url));
link.getPackageListUrl().set(URI.create(url + "/element-list"));
});
});
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2012-2023 the original author or authors.
* Copyright 2012-2024 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.
Expand All @@ -16,6 +16,7 @@

package org.springframework.boot.build.bom.bomr;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
Expand Down Expand Up @@ -58,12 +59,17 @@ private Upgrade resolveUpgrade(LibraryWithVersionOptions libraryWithVersionOptio
if (libraryWithVersionOptions.getVersionOptions().isEmpty()) {
return null;
}
VersionOption current = new VersionOption(libraryWithVersionOptions.getLibrary().getVersion().getVersion());
VersionOption selected = this.userInputHandler.selectOption(
libraryWithVersionOptions.getLibrary().getName() + " "
+ libraryWithVersionOptions.getLibrary().getVersion().getVersion(),
libraryWithVersionOptions.getVersionOptions(), current);
return (selected.equals(current)) ? null
VersionOption defaultOption = new VersionOption(
libraryWithVersionOptions.getLibrary().getVersion().getVersion());
VersionOption selected = this.userInputHandler.askUser((questions) -> {
String question = libraryWithVersionOptions.getLibrary().getName() + " "
+ libraryWithVersionOptions.getLibrary().getVersion().getVersion();
List<VersionOption> options = new ArrayList<>();
options.add(defaultOption);
options.addAll(libraryWithVersionOptions.getVersionOptions());
return questions.selectOption(question, options, defaultOption);
}).get();
return (selected.equals(defaultOption)) ? null
: new Upgrade(libraryWithVersionOptions.getLibrary(), selected.getVersion());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@ private void configureDockerTesting(Project project) {
.add(project.getConfigurations()
.getByName(dockerTestSourceSet.getRuntimeClasspathConfigurationName())));
});
project.getDependencies()
.add(dockerTestSourceSet.getRuntimeOnlyConfigurationName(), "org.junit.platform:junit-platform-launcher");
}

private SourceSet createSourceSet(Project project) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2012-2023 the original author or authors.
* Copyright 2012-2024 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.
Expand Down Expand Up @@ -58,6 +58,8 @@ private void configureIntegrationTesting(Project project) {
eclipse.classpath((classpath) -> classpath.getPlusConfigurations()
.add(project.getConfigurations().getByName(intTestSourceSet.getRuntimeClasspathConfigurationName())));
});
project.getDependencies()
.add(intTestSourceSet.getRuntimeOnlyConfigurationName(), "org.junit.platform:junit-platform-launcher");
}

private SourceSet createSourceSet(Project project) {
Expand Down
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.4-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
7 changes: 5 additions & 2 deletions gradlew
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#

##############################################################################
#
Expand Down Expand Up @@ -55,7 +57,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
Expand Down Expand Up @@ -84,7 +86,8 @@ done
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
' "$PWD" ) || exit

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
Expand Down
2 changes: 2 additions & 0 deletions gradlew.bat
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem

@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,8 @@ tasks.named("test") {
}

def documentationTest = tasks.register("documentationTest", Test) {
testClassesDirs = testing.suites.test.sources.output.classesDirs
classpath = testing.suites.test.sources.runtimeClasspath
filter {
includeTestsMatching("org.springframework.boot.actuate.autoconfigure.endpoint.web.documentation.*")
}
Expand Down
3 changes: 2 additions & 1 deletion spring-boot-project/spring-boot-docs/build.gradle
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
plugins {
id "dev.adamko.dokkatoo-html"
id "java"
id "org.asciidoctor.jvm.convert"
id "org.springframework.boot.conventions"
Expand Down Expand Up @@ -47,7 +48,7 @@ sourcesJar {
}

plugins.withType(EclipsePlugin) {
extensions.getByType(org.gradle.plugins.ide.eclipse.model.EclipseModel).classpath { classpath ->
eclipse.classpath { classpath ->
classpath.plusConfigurations.add(configurations.getByName(sourceSets.main.runtimeClasspathConfigurationName))
}
}
Expand Down
1 change: 1 addition & 0 deletions spring-boot-project/spring-boot-test/build.gradle
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
plugins {
id "dev.adamko.dokkatoo-html"
id "java-library"
id "org.jetbrains.kotlin.jvm"
id "org.springframework.boot.conventions"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,11 +82,11 @@ def configureArchive(archive) {
into "lib/"
}
archive.from(file("src/main/content")) {
dirMode = 0755
fileMode = 0644
dirPermissions { unix(0755) }
filePermissions { unix(0644) }
}
archive.from(file("src/main/executablecontent")) {
fileMode = 0755
filePermissions { unix(0755) }
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,8 @@
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringWriter;
import java.lang.reflect.Method;
import java.util.concurrent.Callable;

import org.gradle.api.Action;
import org.gradle.api.GradleException;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
Expand Down Expand Up @@ -128,32 +126,16 @@ private String loadResource(String name) {

private void configureFilePermissions(CopySpec copySpec, int mode) {
if (GradleVersion.current().compareTo(GradleVersion.version("8.3")) >= 0) {
try {
Method filePermissions = copySpec.getClass().getMethod("filePermissions", Action.class);
filePermissions.invoke(copySpec, new Action<Object>() {

@Override
public void execute(Object filePermissions) {
String unixPermissions = Integer.toString(mode, 8);
try {
Method unix = filePermissions.getClass().getMethod("unix", String.class);
unix.invoke(filePermissions, unixPermissions);
}
catch (Exception ex) {
throw new GradleException("Failed to set file permissions to '" + unixPermissions + "'",
ex);
}
}

});
}
catch (Exception ex) {
throw new GradleException("Failed to set file permissions", ex);
}
copySpec.filePermissions((filePermissions) -> filePermissions.unix(Integer.toString(mode, 8)));
}
else {
copySpec.setFileMode(mode);
configureFileMode(copySpec, mode);
}
}

@SuppressWarnings("deprecation")
private void configureFileMode(CopySpec copySpec, int mode) {
copySpec.setFileMode(mode);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,8 @@
import java.util.Set;
import java.util.TreeMap;
import java.util.function.Function;
import java.util.function.Supplier;

import org.gradle.api.GradleException;
import org.gradle.api.file.ConfigurableFilePermissions;
import org.gradle.api.file.CopySpec;
import org.gradle.api.file.FileCopyDetails;
import org.gradle.api.file.FileTreeElement;
Expand Down Expand Up @@ -133,44 +132,44 @@ CopyAction createCopyAction(Jar jar, ResolvedDependencies resolvedDependencies,
File output = jar.getArchiveFile().get().getAsFile();
Manifest manifest = jar.getManifest();
boolean preserveFileTimestamps = jar.isPreserveFileTimestamps();
Integer dirMode = getDirMode(jar);
Integer fileMode = getFileMode(jar);
Integer dirPermissions = getUnixNumericDirPermissions(jar);
Integer filePermissions = getUnixNumericFilePermissions(jar);
boolean includeDefaultLoader = isUsingDefaultLoader(jar);
Spec<FileTreeElement> requiresUnpack = this.requiresUnpack.getAsSpec();
Spec<FileTreeElement> exclusions = this.exclusions.getAsExcludeSpec();
LaunchScriptConfiguration launchScript = this.launchScript;
Spec<FileCopyDetails> librarySpec = this.librarySpec;
Function<FileCopyDetails, ZipCompression> compressionResolver = this.compressionResolver;
String encoding = jar.getMetadataCharset();
CopyAction action = new BootZipCopyAction(output, manifest, preserveFileTimestamps, dirMode, fileMode,
includeDefaultLoader, layerToolsLocation, requiresUnpack, exclusions, launchScript, librarySpec,
compressionResolver, encoding, resolvedDependencies, supportsSignatureFile, layerResolver,
CopyAction action = new BootZipCopyAction(output, manifest, preserveFileTimestamps, dirPermissions,
filePermissions, includeDefaultLoader, layerToolsLocation, requiresUnpack, exclusions, launchScript,
librarySpec, compressionResolver, encoding, resolvedDependencies, supportsSignatureFile, layerResolver,
loaderImplementation);
return jar.isReproducibleFileOrder() ? new ReproducibleOrderingCopyAction(action) : action;
}

private Integer getDirMode(CopySpec copySpec) {
return getMode(copySpec, "getDirPermissions", () -> copySpec.getDirMode());
private Integer getUnixNumericDirPermissions(CopySpec copySpec) {
return (GradleVersion.current().compareTo(GradleVersion.version("8.3")) >= 0)
? asUnixNumeric(copySpec.getDirPermissions()) : getDirMode(copySpec);
}

private Integer getFileMode(CopySpec copySpec) {
return getMode(copySpec, "getFilePermissions", () -> copySpec.getFileMode());
private Integer getUnixNumericFilePermissions(CopySpec copySpec) {
return (GradleVersion.current().compareTo(GradleVersion.version("8.3")) >= 0)
? asUnixNumeric(copySpec.getFilePermissions()) : getFileMode(copySpec);
}

@SuppressWarnings("unchecked")
private Integer getMode(CopySpec copySpec, String methodName, Supplier<Integer> fallback) {
if (GradleVersion.current().compareTo(GradleVersion.version("8.3")) >= 0) {
try {
Object filePermissions = ((Property<Object>) copySpec.getClass().getMethod(methodName).invoke(copySpec))
.getOrNull();
return (filePermissions != null)
? (int) filePermissions.getClass().getMethod("toUnixNumeric").invoke(filePermissions) : null;
}
catch (Exception ex) {
throw new GradleException("Failed to get permissions", ex);
}
}
return fallback.get();
private Integer asUnixNumeric(Property<ConfigurableFilePermissions> permissions) {
return permissions.isPresent() ? permissions.get().toUnixNumeric() : null;
}

@SuppressWarnings("deprecation")
private Integer getDirMode(CopySpec copySpec) {
return copySpec.getDirMode();
}

@SuppressWarnings("deprecation")
private Integer getFileMode(CopySpec copySpec) {
return copySpec.getFileMode();
}

private boolean isUsingDefaultLoader(Jar jar) {
Expand Down
Loading

0 comments on commit eafe61c

Please sign in to comment.