|
|
|
@ -26,9 +26,8 @@ import java.util.Map; |
|
|
|
import java.util.Set; |
|
|
|
import java.util.Set; |
|
|
|
import java.util.TreeMap; |
|
|
|
import java.util.TreeMap; |
|
|
|
import java.util.function.Function; |
|
|
|
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.CopySpec; |
|
|
|
import org.gradle.api.file.FileCopyDetails; |
|
|
|
import org.gradle.api.file.FileCopyDetails; |
|
|
|
import org.gradle.api.file.FileTreeElement; |
|
|
|
import org.gradle.api.file.FileTreeElement; |
|
|
|
@ -133,8 +132,8 @@ class BootArchiveSupport { |
|
|
|
File output = jar.getArchiveFile().get().getAsFile(); |
|
|
|
File output = jar.getArchiveFile().get().getAsFile(); |
|
|
|
Manifest manifest = jar.getManifest(); |
|
|
|
Manifest manifest = jar.getManifest(); |
|
|
|
boolean preserveFileTimestamps = jar.isPreserveFileTimestamps(); |
|
|
|
boolean preserveFileTimestamps = jar.isPreserveFileTimestamps(); |
|
|
|
Integer dirMode = getDirMode(jar); |
|
|
|
Integer dirPermissions = getUnixNumericDirPermissions(jar); |
|
|
|
Integer fileMode = getFileMode(jar); |
|
|
|
Integer filePermissions = getUnixNumericFilePermissions(jar); |
|
|
|
boolean includeDefaultLoader = isUsingDefaultLoader(jar); |
|
|
|
boolean includeDefaultLoader = isUsingDefaultLoader(jar); |
|
|
|
Spec<FileTreeElement> requiresUnpack = this.requiresUnpack.getAsSpec(); |
|
|
|
Spec<FileTreeElement> requiresUnpack = this.requiresUnpack.getAsSpec(); |
|
|
|
Spec<FileTreeElement> exclusions = this.exclusions.getAsExcludeSpec(); |
|
|
|
Spec<FileTreeElement> exclusions = this.exclusions.getAsExcludeSpec(); |
|
|
|
@ -142,35 +141,35 @@ class BootArchiveSupport { |
|
|
|
Spec<FileCopyDetails> librarySpec = this.librarySpec; |
|
|
|
Spec<FileCopyDetails> librarySpec = this.librarySpec; |
|
|
|
Function<FileCopyDetails, ZipCompression> compressionResolver = this.compressionResolver; |
|
|
|
Function<FileCopyDetails, ZipCompression> compressionResolver = this.compressionResolver; |
|
|
|
String encoding = jar.getMetadataCharset(); |
|
|
|
String encoding = jar.getMetadataCharset(); |
|
|
|
CopyAction action = new BootZipCopyAction(output, manifest, preserveFileTimestamps, dirMode, fileMode, |
|
|
|
CopyAction action = new BootZipCopyAction(output, manifest, preserveFileTimestamps, dirPermissions, |
|
|
|
includeDefaultLoader, jarmodeToolsLocation, requiresUnpack, exclusions, launchScript, librarySpec, |
|
|
|
filePermissions, includeDefaultLoader, jarmodeToolsLocation, requiresUnpack, exclusions, launchScript, |
|
|
|
compressionResolver, encoding, resolvedDependencies, supportsSignatureFile, layerResolver, |
|
|
|
librarySpec, compressionResolver, encoding, resolvedDependencies, supportsSignatureFile, layerResolver, |
|
|
|
loaderImplementation); |
|
|
|
loaderImplementation); |
|
|
|
return jar.isReproducibleFileOrder() ? new ReproducibleOrderingCopyAction(action) : action; |
|
|
|
return jar.isReproducibleFileOrder() ? new ReproducibleOrderingCopyAction(action) : action; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private Integer getDirMode(CopySpec copySpec) { |
|
|
|
private Integer getUnixNumericDirPermissions(CopySpec copySpec) { |
|
|
|
return getMode(copySpec, "getDirPermissions", () -> copySpec.getDirMode()); |
|
|
|
return (GradleVersion.current().compareTo(GradleVersion.version("8.3")) >= 0) |
|
|
|
|
|
|
|
? asUnixNumeric(copySpec.getDirPermissions()) : getDirMode(copySpec); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private Integer getFileMode(CopySpec copySpec) { |
|
|
|
private Integer getUnixNumericFilePermissions(CopySpec copySpec) { |
|
|
|
return getMode(copySpec, "getFilePermissions", () -> copySpec.getFileMode()); |
|
|
|
return (GradleVersion.current().compareTo(GradleVersion.version("8.3")) >= 0) |
|
|
|
|
|
|
|
? asUnixNumeric(copySpec.getFilePermissions()) : getFileMode(copySpec); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@SuppressWarnings("unchecked") |
|
|
|
private Integer asUnixNumeric(Property<ConfigurableFilePermissions> permissions) { |
|
|
|
private Integer getMode(CopySpec copySpec, String methodName, Supplier<Integer> fallback) { |
|
|
|
return permissions.isPresent() ? permissions.get().toUnixNumeric() : null; |
|
|
|
if (GradleVersion.current().compareTo(GradleVersion.version("8.3")) >= 0) { |
|
|
|
} |
|
|
|
try { |
|
|
|
|
|
|
|
Object filePermissions = ((Property<Object>) copySpec.getClass().getMethod(methodName).invoke(copySpec)) |
|
|
|
@SuppressWarnings("deprecation") |
|
|
|
.getOrNull(); |
|
|
|
private Integer getDirMode(CopySpec copySpec) { |
|
|
|
return (filePermissions != null) |
|
|
|
return copySpec.getDirMode(); |
|
|
|
? (int) filePermissions.getClass().getMethod("toUnixNumeric").invoke(filePermissions) : null; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
catch (Exception ex) { |
|
|
|
@SuppressWarnings("deprecation") |
|
|
|
throw new GradleException("Failed to get permissions", ex); |
|
|
|
private Integer getFileMode(CopySpec copySpec) { |
|
|
|
} |
|
|
|
return copySpec.getFileMode(); |
|
|
|
} |
|
|
|
|
|
|
|
return fallback.get(); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private boolean isUsingDefaultLoader(Jar jar) { |
|
|
|
private boolean isUsingDefaultLoader(Jar jar) { |
|
|
|
|