From 43b3c13b0ec7e95459429f303d53fddaf1f0c18b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 1 Mar 2026 11:38:27 +0000 Subject: [PATCH 1/3] Initial plan From 8314546c8ab3921299f2026e551c8f8d2405f69a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 1 Mar 2026 11:42:49 +0000 Subject: [PATCH 2/3] Replace compatGradleArtifactTransform with shadowJarWithArtifactTransformOnProjectDependency in FilteringTest Co-authored-by: Goooler <10363352+Goooler@users.noreply.github.com> --- .../gradle/plugins/shadow/FilteringTest.kt | 77 +++++++++++++ .../gradle/plugins/shadow/JavaPluginsTest.kt | 105 ------------------ 2 files changed, 77 insertions(+), 105 deletions(-) diff --git a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/FilteringTest.kt b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/FilteringTest.kt index be80e5e49..eef17c4d3 100644 --- a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/FilteringTest.kt +++ b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/FilteringTest.kt @@ -1,6 +1,8 @@ package com.github.jengelman.gradle.plugins.shadow import assertk.assertThat +import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar.Companion.SHADOW_JAR_TASK_NAME +import com.github.jengelman.gradle.plugins.shadow.testkit.containsAtLeast import com.github.jengelman.gradle.plugins.shadow.testkit.containsOnly import com.github.jengelman.gradle.plugins.shadow.util.Issue import kotlin.io.path.appendText @@ -247,6 +249,81 @@ class FilteringTest : BasePluginTest() { } } + @Issue("https://github.com/GradleUp/shadow/issues/882") + @Test + fun shadowJarWithArtifactTransformOnProjectDependency() { + settingsScript.appendText( + """ + include 'lib', 'app' + """ + .trimIndent() + ) + projectScript.writeText("") + + path("lib/src/main/java/lib/Lib.java") + .writeText( + """ + package lib; + public class Lib {} + """ + .trimIndent() + ) + path("lib/build.gradle").writeText(getDefaultProjectBuildScript("java") + lineSeparator) + + path("app/src/main/java/app/App.java") + .writeText( + """ + package app; + public class App {} + """ + .trimIndent() + ) + path("app/build.gradle") + .writeText( + """ + ${getDefaultProjectBuildScript("java")} + + abstract class NoOpTransform implements TransformAction { + @InputArtifact + abstract Provider getInputArtifact() + + void transform(TransformOutputs outputs) { + def input = inputArtifact.get().asFile + def output = outputs.file(input.name) + output.bytes = input.bytes + } + } + + def customAttr = Attribute.of('custom-transformed', Boolean) + + dependencies { + implementation project(':lib') + attributesSchema { + attribute(customAttr) + } + artifactTypes.getByName('jar') { + attributes.attribute(customAttr, false) + } + registerTransform(NoOpTransform) { + from.attribute(customAttr, false) + to.attribute(customAttr, true) + } + } + + configurations.runtimeClasspath { + attributes.attribute(customAttr, true) + } + """ + .trimIndent() + lineSeparator + ) + + runWithSuccess(":app:$SHADOW_JAR_TASK_NAME") + + assertThat(jarPath("app/build/libs/app-1.0-all.jar")).useAll { + containsAtLeast("app/", "app/App.class", "lib/", "lib/Lib.class", *manifestEntries) + } + } + private fun commonAssertions() { assertThat(outputShadowedJar).useAll { containsOnly("c.properties", *entriesInAB, *manifestEntries) diff --git a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/JavaPluginsTest.kt b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/JavaPluginsTest.kt index 43d7cc948..f2d39283b 100644 --- a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/JavaPluginsTest.kt +++ b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/JavaPluginsTest.kt @@ -948,111 +948,6 @@ class JavaPluginsTest : BasePluginTest() { assertThat(outputShadowedJar).useAll { getMainAttr(mainClassAttributeKey).isEqualTo(expected) } } - @Issue("https://github.com/GradleUp/shadow/issues/882") - @Test - fun compatGradleArtifactTransform() { - settingsScript.writeText("include('app', 'lib')\n") - path("lib/build.gradle") - .writeText( - """ - plugins { - id 'java-library' - } - """ - .trimIndent() - ) - path("lib/src/main/java/com/company/Utils.java") - .writeText( - """ - package com.company; - - public class Utils { - public static void foo() { - System.out.println("bar"); - } - } - """ - .trimIndent() - ) - path("app/build.gradle") - .writeText( - """ - import org.gradle.api.artifacts.transform.TransformParameters - import org.gradle.api.artifacts.transform.TransformAction - import org.gradle.api.artifacts.transform.TransformOutputs - import org.gradle.api.artifacts.transform.InputArtifact - import org.gradle.api.file.FileSystemLocation - import org.gradle.api.provider.Provider - - plugins { - id 'application' - id '$shadowPluginId' - } - - application { - mainClass = 'com.company.Main' - } - - dependencies { - implementation project(':lib') - } - - def transformedAttribute = Attribute.of('custom-transformed', Boolean) - - dependencies { - attributesSchema { - attribute(transformedAttribute) - } - artifactTypes.maybeCreate('jar').attributes.attribute(transformedAttribute, false) - } - - dependencies { - registerTransform(CustomTransformAction) { - from.attribute(Attribute.of('artifactType', String), 'jar').attribute(transformedAttribute, false) - to.attribute(Attribute.of('artifactType', String), 'jar').attribute(transformedAttribute, true) - } - } - - $shadowJarTask { - configurations = [project.configurations.runtimeClasspath] - } - - configurations.runtimeClasspath { - attributes.attribute(transformedAttribute, true) - } - - abstract class CustomTransformAction implements TransformAction { - @InputArtifact abstract Provider getInputArtifact() - - @Override - void transform(TransformOutputs outputs) { - outputs.file(inputArtifact.get().asFile) - } - } - """ - .trimIndent() - ) - path("app/src/main/java/com/company/Main.java") - .writeText( - """ - package com.company; - - public class Main { - public static void main(String[] args) { - Utils.foo(); - } - } - """ - .trimIndent() - ) - - runWithSuccess(":app:$SHADOW_JAR_TASK_NAME") - - assertThat(jarPath("app/build/libs/app-all.jar")).useAll { - containsAtLeast("com/company/Main.class", "com/company/Utils.class", manifestEntry) - } - } - private fun dependencies(configuration: String, vararg flags: String): String { return runWithSuccess("dependencies", "--configuration", configuration, *flags).output } From 46120aff9e0fba47ecfa22fa18027a50e284f818 Mon Sep 17 00:00:00 2001 From: Goooler Date: Sun, 1 Mar 2026 19:46:56 +0800 Subject: [PATCH 3/3] Restore and replace --- .../gradle/plugins/shadow/FilteringTest.kt | 77 ------------------- .../gradle/plugins/shadow/JavaPluginsTest.kt | 75 ++++++++++++++++++ 2 files changed, 75 insertions(+), 77 deletions(-) diff --git a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/FilteringTest.kt b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/FilteringTest.kt index eef17c4d3..be80e5e49 100644 --- a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/FilteringTest.kt +++ b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/FilteringTest.kt @@ -1,8 +1,6 @@ package com.github.jengelman.gradle.plugins.shadow import assertk.assertThat -import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar.Companion.SHADOW_JAR_TASK_NAME -import com.github.jengelman.gradle.plugins.shadow.testkit.containsAtLeast import com.github.jengelman.gradle.plugins.shadow.testkit.containsOnly import com.github.jengelman.gradle.plugins.shadow.util.Issue import kotlin.io.path.appendText @@ -249,81 +247,6 @@ class FilteringTest : BasePluginTest() { } } - @Issue("https://github.com/GradleUp/shadow/issues/882") - @Test - fun shadowJarWithArtifactTransformOnProjectDependency() { - settingsScript.appendText( - """ - include 'lib', 'app' - """ - .trimIndent() - ) - projectScript.writeText("") - - path("lib/src/main/java/lib/Lib.java") - .writeText( - """ - package lib; - public class Lib {} - """ - .trimIndent() - ) - path("lib/build.gradle").writeText(getDefaultProjectBuildScript("java") + lineSeparator) - - path("app/src/main/java/app/App.java") - .writeText( - """ - package app; - public class App {} - """ - .trimIndent() - ) - path("app/build.gradle") - .writeText( - """ - ${getDefaultProjectBuildScript("java")} - - abstract class NoOpTransform implements TransformAction { - @InputArtifact - abstract Provider getInputArtifact() - - void transform(TransformOutputs outputs) { - def input = inputArtifact.get().asFile - def output = outputs.file(input.name) - output.bytes = input.bytes - } - } - - def customAttr = Attribute.of('custom-transformed', Boolean) - - dependencies { - implementation project(':lib') - attributesSchema { - attribute(customAttr) - } - artifactTypes.getByName('jar') { - attributes.attribute(customAttr, false) - } - registerTransform(NoOpTransform) { - from.attribute(customAttr, false) - to.attribute(customAttr, true) - } - } - - configurations.runtimeClasspath { - attributes.attribute(customAttr, true) - } - """ - .trimIndent() + lineSeparator - ) - - runWithSuccess(":app:$SHADOW_JAR_TASK_NAME") - - assertThat(jarPath("app/build/libs/app-1.0-all.jar")).useAll { - containsAtLeast("app/", "app/App.class", "lib/", "lib/Lib.class", *manifestEntries) - } - } - private fun commonAssertions() { assertThat(outputShadowedJar).useAll { containsOnly("c.properties", *entriesInAB, *manifestEntries) diff --git a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/JavaPluginsTest.kt b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/JavaPluginsTest.kt index f2d39283b..bfda7f696 100644 --- a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/JavaPluginsTest.kt +++ b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/JavaPluginsTest.kt @@ -948,6 +948,81 @@ class JavaPluginsTest : BasePluginTest() { assertThat(outputShadowedJar).useAll { getMainAttr(mainClassAttributeKey).isEqualTo(expected) } } + @Issue("https://github.com/GradleUp/shadow/issues/882") + @Test + fun compatGradleArtifactTransform() { + settingsScript.appendText( + """ + include 'lib', 'app' + """ + .trimIndent() + ) + projectScript.writeText("") + + path("lib/src/main/java/lib/Lib.java") + .writeText( + """ + package lib; + public class Lib {} + """ + .trimIndent() + ) + path("lib/build.gradle").writeText(getDefaultProjectBuildScript("java") + lineSeparator) + + path("app/src/main/java/app/App.java") + .writeText( + """ + package app; + public class App {} + """ + .trimIndent() + ) + path("app/build.gradle") + .writeText( + """ + ${getDefaultProjectBuildScript("java")} + + abstract class NoOpTransform implements TransformAction { + @InputArtifact + abstract Provider getInputArtifact() + + void transform(TransformOutputs outputs) { + def input = inputArtifact.get().asFile + def output = outputs.file(input.name) + output.bytes = input.bytes + } + } + + def customAttr = Attribute.of('custom-transformed', Boolean) + + dependencies { + implementation project(':lib') + attributesSchema { + attribute(customAttr) + } + artifactTypes.getByName('jar') { + attributes.attribute(customAttr, false) + } + registerTransform(NoOpTransform) { + from.attribute(customAttr, false) + to.attribute(customAttr, true) + } + } + + configurations.runtimeClasspath { + attributes.attribute(customAttr, true) + } + """ + .trimIndent() + lineSeparator + ) + + runWithSuccess(":app:$SHADOW_JAR_TASK_NAME") + + assertThat(jarPath("app/build/libs/app-1.0-all.jar")).useAll { + containsAtLeast("app/", "app/App.class", "lib/", "lib/Lib.class", *manifestEntries) + } + } + private fun dependencies(configuration: String, vararg flags: String): String { return runWithSuccess("dependencies", "--configuration", configuration, *flags).output }