diff --git a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/BasePluginTest.kt b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/BasePluginTest.kt index 4bcd76c31..f830a319d 100644 --- a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/BasePluginTest.kt +++ b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/BasePluginTest.kt @@ -111,6 +111,11 @@ abstract class BasePluginTest { // Circular dependency with e. addDependency(e) } + val g = + jarModule("my", "g", "1.0") { + buildJar { insert("g.properties", "g") } + addDependency(pomModule("my", "pom-dep", "1.0")) + } bomModule("my", "bom", "1.0") { addDependency(a) addDependency(b) @@ -118,6 +123,7 @@ abstract class BasePluginTest { addDependency(d) addDependency(e) addDependency(f) + addDependency(g) } } localRepo.publish() 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 7b7fa5b55..25c137088 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 @@ -237,6 +237,29 @@ class FilteringTest : BasePluginTest() { } } + @Test + fun excludeNonJarTransitiveDependency() { + projectScript.appendText( + """ + |dependencies { + | implementation 'my:g:1.0' + |} + |$shadowJarTask { + | dependencies { + | exclude(dependency('my:pom-dep:.*')) + | } + |} + """ + .trimMargin() + ) + + runWithSuccess(shadowJarPath) + + assertThat(outputShadowedJar).useAll { + containsOnly("g.properties", *entriesInAB, "META-INF/", "META-INF/MANIFEST.MF") + } + } + private fun commonAssertions() { assertThat(outputShadowedJar).useAll { containsOnly("c.properties", *entriesInAB, "META-INF/", "META-INF/MANIFEST.MF") diff --git a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/R8MinimizationTest.kt b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/R8MinimizationTest.kt index 1f88bf4c4..e8486419e 100644 --- a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/R8MinimizationTest.kt +++ b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/R8MinimizationTest.kt @@ -512,6 +512,40 @@ class R8MinimizationTest : BasePluginTest() { assertThat(result.output).contains("R8 launcher JDK ${JavaVersion.current().majorVersion}") } + @Test + fun passCustomR8Args() { + writeR8AppAndLibModules( + appShadowBlock = + """ + |minimize { + | r8 { + | // Disable shrinking to prove custom R8 args are passed through. + | args.add("--no-tree-shaking") + | } + |} + """ + .trimMargin() + ) + + runWithSuccess(appShadowJarPath) + + assertThat(outputAppShadowedJar).useAll { + containsOnly( + "a/a.class", + "a/b.class", + "a/c.class", + "app/App.class", + "META-INF/MANIFEST.MF", + ) + classLoader { + loadClass("app.App") + loadClass("a.a") + loadClass("a.b") + loadClass("a.c") + } + } + } + @Test fun supportClasspathInR8() { writeR8AppAndLibModules( diff --git a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/util/AppendableMavenRepository.kt b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/util/AppendableMavenRepository.kt index a52c30c8e..f4e86a06e 100644 --- a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/util/AppendableMavenRepository.kt +++ b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/util/AppendableMavenRepository.kt @@ -43,6 +43,17 @@ class AppendableMavenRepository(val root: Path) { return bomModule.coordinate } + fun pomModule( + groupId: String, + artifactId: String, + version: String, + action: PomModule.() -> Unit = {}, + ): String { + val pomModule = PomModule(groupId, artifactId, version).also(action) + modules += pomModule + return pomModule.coordinate + } + fun publish() { check(modules.isNotEmpty()) { "No modules to publish. Please add at least one module." } val writer = MavenXpp3Writer() @@ -68,6 +79,10 @@ class AppendableMavenRepository(val root: Path) { dependencyManagement = DependencyManagement().apply { dependencies = module.dependencies } } + is PomModule -> { + packaging = "pom" + dependencies = module.dependencies + } } } @@ -142,6 +157,9 @@ class AppendableMavenRepository(val root: Path) { class BomModule(groupId: String, artifactId: String, version: String) : Module(groupId, artifactId, version) + + class PomModule(groupId: String, artifactId: String, version: String) : + Module(groupId, artifactId, version) } private val logger = Logging.getLogger(AppendableMavenRepository::class.java)