Merge branch '3.2.x' into 3.3.x

Closes gh-42434
This commit is contained in:
Phillip Webb
2024-09-24 12:59:54 -07:00
23 changed files with 103 additions and 111 deletions

View File

@@ -19,10 +19,8 @@ package org.springframework.boot.gradle.plugin;
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;
@@ -128,32 +126,16 @@ final class ApplicationPluginAction implements PluginApplicationAction {
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<>() {
@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);
}
}

View File

@@ -26,9 +26,8 @@ import java.util.Map;
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;
@@ -133,8 +132,8 @@ class BootArchiveSupport {
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();
@@ -142,35 +141,35 @@ class BootArchiveSupport {
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, jarmodeToolsLocation, requiresUnpack, exclusions, launchScript, librarySpec,
compressionResolver, encoding, resolvedDependencies, supportsSignatureFile, layerResolver,
CopyAction action = new BootZipCopyAction(output, manifest, preserveFileTimestamps, dirPermissions,
filePermissions, includeDefaultLoader, jarmodeToolsLocation, requiresUnpack, exclusions, launchScript,
librarySpec, compressionResolver, encoding, resolvedDependencies, supportsSignatureFile, layerResolver,
loaderImplementation);
return jar.isReproducibleFileOrder() ? new ReproducibleOrderingCopyAction(action) : action;
}
private Integer getUnixNumericDirPermissions(CopySpec copySpec) {
return (GradleVersion.current().compareTo(GradleVersion.version("8.3")) >= 0)
? asUnixNumeric(copySpec.getDirPermissions()) : getDirMode(copySpec);
}
private Integer getUnixNumericFilePermissions(CopySpec copySpec) {
return (GradleVersion.current().compareTo(GradleVersion.version("8.3")) >= 0)
? asUnixNumeric(copySpec.getFilePermissions()) : getFileMode(copySpec);
}
private Integer asUnixNumeric(Property<ConfigurableFilePermissions> permissions) {
return permissions.isPresent() ? permissions.get().toUnixNumeric() : null;
}
@SuppressWarnings("deprecation")
private Integer getDirMode(CopySpec copySpec) {
return getMode(copySpec, "getDirPermissions", () -> copySpec.getDirMode());
return copySpec.getDirMode();
}
@SuppressWarnings("deprecation")
private Integer getFileMode(CopySpec copySpec) {
return getMode(copySpec, "getFilePermissions", () -> copySpec.getFileMode());
}
@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();
return copySpec.getFileMode();
}
private boolean isUsingDefaultLoader(Jar jar) {

View File

@@ -22,7 +22,6 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.lang.reflect.Method;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.util.Collection;
@@ -488,17 +487,12 @@ class BootZipCopyAction implements CopyAction {
}
private int getPermissions(FileCopyDetails details) {
if (GradleVersion.current().compareTo(GradleVersion.version("8.3")) >= 0) {
try {
Method getPermissionsMethod = details.getClass().getMethod("getPermissions");
getPermissionsMethod.setAccessible(true);
Object permissions = getPermissionsMethod.invoke(details);
return (int) permissions.getClass().getMethod("toUnixNumeric").invoke(permissions);
}
catch (Exception ex) {
throw new GradleException("Failed to get permissions", ex);
}
}
return (GradleVersion.current().compareTo(GradleVersion.version("8.3")) >= 0)
? details.getPermissions().toUnixNumeric() : getMode(details);
}
@SuppressWarnings("deprecation")
private int getMode(FileCopyDetails details) {
return details.getMode();
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2012-2022 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.
@@ -18,22 +18,17 @@ package org.springframework.boot.gradle.junit;
import java.io.File;
import org.gradle.api.JavaVersion;
import org.gradle.api.Project;
import org.gradle.internal.nativeintegration.services.NativeServices;
import org.gradle.testfixtures.ProjectBuilder;
import org.gradle.testfixtures.internal.ProjectBuilderImpl;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
/**
* Helper class to build Gradle {@link Project Projects} for test fixtures. Wraps
* functionality of Gradle's own {@link ProjectBuilder} in order to work around an issue
* on JDK 17 and 18.
* functionality of Gradle's own {@link ProjectBuilder}.
*
* @author Christoph Dreis
* @see <a href="https://github.com/gradle/gradle/issues/16857">Gradle Support JDK 17</a>
*/
public final class GradleProjectBuilder {
@@ -67,14 +62,6 @@ public final class GradleProjectBuilder {
if (StringUtils.hasText(this.name)) {
builder.withName(this.name);
}
if (JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_17)) {
NativeServices.initializeOnClient(userHome);
try {
ProjectBuilderImpl.getGlobalServices();
}
catch (Throwable ignore) {
}
}
return builder.build();
}

View File

@@ -83,7 +83,7 @@ class KotlinPluginActionIntegrationTests {
configured.add(line.substring("Configuring :".length()));
}
}
assertThat(configured).containsExactlyInAnyOrder("help", "clean");
assertThat(configured).containsExactlyInAnyOrder("help", "compileJava", "clean");
}
}

View File

@@ -176,7 +176,7 @@ class BuildInfoTests {
Project project = GradleProjectBuilder.builder().withProjectDir(projectDir).withName(projectName).build();
((ProjectInternal) project).getServices()
.get(GradlePropertiesController.class)
.loadGradlePropertiesFrom(projectDir);
.loadGradlePropertiesFrom(projectDir, false);
return project;
}