diff --git a/src/docs/changes/README.md b/src/docs/changes/README.md index fbec6de81..bf38070dd 100644 --- a/src/docs/changes/README.md +++ b/src/docs/changes/README.md @@ -13,6 +13,10 @@ Some public `List` parameters are also changed to `Set`. - Replace deprecated `SelfResolvingDependency` with `FileCollectionDependency`. ([#1114](https://github.com/GradleUp/shadow/pull/1114)) +**Fixed** + +- Fail builds if processing bad jars. ([#1146](https://github.com/GradleUp/shadow/pull/1146)) + ## [v9.0.0-beta4] (2024-12-06) diff --git a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/ShadowPluginTest.kt b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/ShadowPluginTest.kt index 46570901d..5283dfd58 100644 --- a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/ShadowPluginTest.kt +++ b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/ShadowPluginTest.kt @@ -1,5 +1,6 @@ package com.github.jengelman.gradle.plugins.shadow +import assertk.all import assertk.assertThat import assertk.assertions.contains import assertk.assertions.isEqualTo @@ -18,6 +19,7 @@ import kotlin.io.path.readText import kotlin.io.path.writeText import org.gradle.api.plugins.JavaPlugin import org.gradle.testfixtures.ProjectBuilder +import org.gradle.testkit.runner.TaskOutcome.FAILED import org.gradle.testkit.runner.TaskOutcome.SUCCESS import org.gradle.testkit.runner.TaskOutcome.UP_TO_DATE import org.junit.jupiter.api.Disabled @@ -830,6 +832,33 @@ class ShadowPluginTest : BasePluginTest() { assertThat(result.output).contains("Reusing configuration cache.") } + @Issue( + "https://github.com/GradleUp/shadow/issues/915", + ) + @Test + fun failBuildIfProcessingBadJar() { + val badJarPath = path("bad.jar").apply { + writeText("A bad jar.") + }.toUri().toURL().path + + projectScriptPath.appendText( + """ + dependencies { + implementation files('$badJarPath') + } + """.trimIndent(), + ) + + val result = runWithFailure(shadowJarTask) + + assertThat(result).all { + taskOutcomeEquals(shadowJarTask, FAILED) + transform { it.output }.contains( + "java.util.zip.ZipException: archive is not a ZIP archive", + ) + } + } + private fun writeShadowedClientAndServerModules() { writeClientAndServerModules() path("client/build.gradle").appendText( diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowCopyAction.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowCopyAction.kt index 82e09ad13..f9eb496b4 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowCopyAction.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowCopyAction.kt @@ -124,6 +124,8 @@ public open class ShadowCopyAction internal constructor( "See: ${documentationRegistry.getDslRefForProperty(Zip::class.java, "zip64")}", ) } + // Rethrow the exception like `java.util.zip.ZipException: archive is not a ZIP archive`. + throw e } return WorkResults.didWork(true) }