From 5f4bb80094b026215777bc5c38fe2620accef122 Mon Sep 17 00:00:00 2001 From: Matyrobbrt <65940752+Matyrobbrt@users.noreply.github.com> Date: Sat, 15 Jun 2024 20:17:14 +0300 Subject: [PATCH] Skip the jarJar task when the input configurations are empty (#24) --- .../neoforged/moddevgradle/tasks/JarJar.java | 59 +++++++++++-------- 1 file changed, 36 insertions(+), 23 deletions(-) diff --git a/src/main/java/net/neoforged/moddevgradle/tasks/JarJar.java b/src/main/java/net/neoforged/moddevgradle/tasks/JarJar.java index a506014a..08979e88 100644 --- a/src/main/java/net/neoforged/moddevgradle/tasks/JarJar.java +++ b/src/main/java/net/neoforged/moddevgradle/tasks/JarJar.java @@ -6,10 +6,14 @@ import net.neoforged.moddevgradle.internal.jarjar.ResolvedJarJarArtifact; import org.gradle.api.DefaultTask; import org.gradle.api.artifacts.Configuration; +import org.gradle.api.file.ConfigurableFileCollection; import org.gradle.api.file.DirectoryProperty; import org.gradle.api.file.FileSystemOperations; +import org.gradle.api.model.ObjectFactory; +import org.gradle.api.tasks.InputFiles; import org.gradle.api.tasks.Nested; import org.gradle.api.tasks.OutputDirectory; +import org.gradle.api.tasks.SkipWhenEmpty; import org.gradle.api.tasks.TaskAction; import org.jetbrains.annotations.ApiStatus; @@ -28,6 +32,16 @@ public abstract class JarJar extends DefaultTask { @ApiStatus.Internal protected abstract JarJarArtifacts getJarJarArtifacts(); + // Used for NO-SOURCE tracking to prevent the task from running if no configurations are defined + @InputFiles + @SkipWhenEmpty + @ApiStatus.Internal + protected abstract ConfigurableFileCollection getInputFiles(); + + @Inject + @ApiStatus.Internal + protected abstract ObjectFactory getObjects(); + @OutputDirectory public abstract DirectoryProperty getOutputDirectory(); @@ -42,44 +56,43 @@ public JarJar(FileSystemOperations fileSystemOperations) { @TaskAction protected void run() { List includedJars = getJarJarArtifacts().getResolvedArtifacts().get(); - fileSystemOperations.delete(spec -> { - spec.delete(getOutputDirectory()); - }); - fileSystemOperations.copy(spec -> { - spec.into(getOutputDirectory().dir("META-INF/jarjar")); - spec.from( - includedJars.stream().map(ResolvedJarJarArtifact::getFile).collect(Collectors.toList()) - ); - if (!writeMetadata(includedJars).jars().isEmpty()) { - // Only copy metadata if not empty. - spec.from(getJarJarMetadataPath().toFile()); - } - }); + fileSystemOperations.delete(spec -> spec.delete(getOutputDirectory())); + + // Only copy metadata if not empty, always delete + if (!includedJars.isEmpty()) { + fileSystemOperations.copy(spec -> { + spec.into(getOutputDirectory().dir("META-INF/jarjar")); + spec.from(includedJars.stream().map(ResolvedJarJarArtifact::getFile).toArray()); + spec.from(writeMetadata(includedJars).toFile()); + }); + } } @SuppressWarnings("ResultOfMethodCallIgnored") - private Metadata writeMetadata(List includedJars) { + private Path writeMetadata(List includedJars) { final Path metadataPath = getJarJarMetadataPath(); final Metadata metadata = createMetadata(includedJars); - if (!metadata.jars().isEmpty()) { - try { - metadataPath.toFile().getParentFile().mkdirs(); - Files.deleteIfExists(metadataPath); - Files.write(metadataPath, MetadataIOHandler.toLines(metadata), StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE); - } catch (IOException e) { - throw new RuntimeException("Failed to write JarJar dependency metadata to disk.", e); - } + try { + metadataPath.toFile().getParentFile().mkdirs(); + Files.deleteIfExists(metadataPath); + Files.write(metadataPath, MetadataIOHandler.toLines(metadata), StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE); + } catch (IOException e) { + throw new RuntimeException("Failed to write JarJar dependency metadata to disk.", e); } - return metadata; + return metadataPath; } public void configuration(Configuration jarJarConfiguration) { + getInputFiles().from(jarJarConfiguration); getJarJarArtifacts().configuration(jarJarConfiguration); dependsOn(jarJarConfiguration); } public void setConfigurations(Collection configurations) { + var newConfig = getObjects().fileCollection(); + newConfig.from(configurations.toArray()); + getInputFiles().setFrom(newConfig); getJarJarArtifacts().setConfigurations(configurations); configurations.forEach(this::dependsOn); }