From d08bf6a78be7774fd95fb89817b56017abbd6526 Mon Sep 17 00:00:00 2001 From: Goooler Date: Tue, 14 Jan 2025 13:21:26 +0800 Subject: [PATCH 01/11] Add publishShadowedGradlePluginWithMavenPublishPlugin --- .../gradle/plugins/shadow/PublishingTest.kt | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt index 836c4648b..c40206e2d 100644 --- a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt +++ b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt @@ -22,6 +22,7 @@ import kotlin.io.path.appendText import kotlin.io.path.exists import kotlin.io.path.inputStream import kotlin.io.path.isRegularFile +import kotlin.io.path.listDirectoryEntries import kotlin.io.path.readText import kotlin.io.path.writeText import org.apache.maven.model.Model @@ -36,6 +37,8 @@ import org.gradle.testkit.runner.BuildResult import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.junit.jupiter.api.io.TempDir +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.ValueSource class PublishingTest : BasePluginTest() { private val moshi = Moshi.Builder().add(KotlinJsonAdapterFactory()).build() @@ -90,6 +93,46 @@ class PublishingTest : BasePluginTest() { assertShadowVariantCommon(gmmAdapter.fromJson(repoPath("shadow/maven/1.0/maven-1.0.module"))) } + @ParameterizedTest + @ValueSource(booleans = [false, true]) + fun publishShadowedGradlePluginWithMavenPublishPlugin(legacy: Boolean) { + writeGradlePluginModule(legacy) + projectScriptPath.appendText( + publishConfiguration( + projectBlock = """ + group = 'my.plugin' + version = '1.0' + // Workaround for overriding the jar task output by shadowJar. + tasks.named('jar') { + archiveExtension = 'ignored' + } + """.trimIndent(), + shadowBlock = """ + archiveClassifier = '' + """.trimIndent(), + publicationsBlock = """ + shadow(MavenPublication) { + from components.shadow + } + """.trimIndent(), + ), + ) + + publish() + + assertShadowJarCommon(repoJarPath("my/plugin/maven/1.0/maven-1.0.jar")) + assertPomCommon(repoPath("my/plugin/maven/1.0/maven-1.0.pom")) + assertShadowVariantCommon(gmmAdapter.fromJson(repoPath("my/plugin/maven/1.0/maven-1.0.module"))) + + assertThat(repoJarPath("my/plugin/maven/1.0/maven-1.0.jar")).useAll { + transform { actual -> actual.entries().toList().map { it.name }.filter { it.endsWith(".class") } } + .single().isEqualTo("my/plugin/MyPlugin.class") + + // Only the shadowed jar should be included. + transform { it.parent.listDirectoryEntries("*.jar") }.single() + } + } + @Issue( "https://github.com/GradleUp/shadow/issues/860", "https://github.com/GradleUp/shadow/issues/945", From b49478ce3362b7fe92327fbc61690ce2c8772e52 Mon Sep 17 00:00:00 2001 From: Goooler Date: Sat, 18 Jan 2025 09:16:13 +0800 Subject: [PATCH 02/11] Disable CC for publish task to fix the flaky results --- .../github/jengelman/gradle/plugins/shadow/PublishingTest.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt index c40206e2d..2a327d931 100644 --- a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt +++ b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt @@ -106,6 +106,9 @@ class PublishingTest : BasePluginTest() { tasks.named('jar') { archiveExtension = 'ignored' } + tasks.named('publish') { + notCompatibleWithConfigurationCache('https://github.com/GradleUp/shadow/pull/1156#discussion_r1916040827') + } """.trimIndent(), shadowBlock = """ archiveClassifier = '' From 1eec96af10db11162214c257ab5937ac3fbc1020 Mon Sep 17 00:00:00 2001 From: Goooler Date: Sat, 18 Jan 2025 10:02:19 +0800 Subject: [PATCH 03/11] Revert "Disable CC for publish task to fix the flaky results" This reverts commit b49478ce3362b7fe92327fbc61690ce2c8772e52. --- .../github/jengelman/gradle/plugins/shadow/PublishingTest.kt | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt index 2a327d931..c40206e2d 100644 --- a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt +++ b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt @@ -106,9 +106,6 @@ class PublishingTest : BasePluginTest() { tasks.named('jar') { archiveExtension = 'ignored' } - tasks.named('publish') { - notCompatibleWithConfigurationCache('https://github.com/GradleUp/shadow/pull/1156#discussion_r1916040827') - } """.trimIndent(), shadowBlock = """ archiveClassifier = '' From 23749432d2165f5d42a6e317299e4b0fdd56e345 Mon Sep 17 00:00:00 2001 From: Goooler Date: Sat, 18 Jan 2025 10:04:47 +0800 Subject: [PATCH 04/11] Disable automatedPublishing --- .../github/jengelman/gradle/plugins/shadow/PublishingTest.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt index c40206e2d..77a53d9ce 100644 --- a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt +++ b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt @@ -102,9 +102,8 @@ class PublishingTest : BasePluginTest() { projectBlock = """ group = 'my.plugin' version = '1.0' - // Workaround for overriding the jar task output by shadowJar. - tasks.named('jar') { - archiveExtension = 'ignored' + gradlePlugin { + automatedPublishing = false } """.trimIndent(), shadowBlock = """ From 8c4ed8e1e0ab0269c09954e71237a4268856769b Mon Sep 17 00:00:00 2001 From: Goooler Date: Sat, 18 Jan 2025 10:23:57 +0800 Subject: [PATCH 05/11] Revert "Disable automatedPublishing" This reverts commit 23749432d2165f5d42a6e317299e4b0fdd56e345. --- .../github/jengelman/gradle/plugins/shadow/PublishingTest.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt index 77a53d9ce..c40206e2d 100644 --- a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt +++ b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt @@ -102,8 +102,9 @@ class PublishingTest : BasePluginTest() { projectBlock = """ group = 'my.plugin' version = '1.0' - gradlePlugin { - automatedPublishing = false + // Workaround for overriding the jar task output by shadowJar. + tasks.named('jar') { + archiveExtension = 'ignored' } """.trimIndent(), shadowBlock = """ From eb90843ff4ed6235c70f1fa4356d582bf116164c Mon Sep 17 00:00:00 2001 From: Goooler Date: Sat, 18 Jan 2025 11:08:08 +0800 Subject: [PATCH 06/11] Add plugin-publish-with-shadow project for testing --- plugin-publish-with-shadow/build.gradle.kts | 37 +++++++++++++++++++ .../src/main/java/com/my/plugin/MyPlugin.java | 11 ++++++ settings.gradle.kts | 2 + 3 files changed, 50 insertions(+) create mode 100644 plugin-publish-with-shadow/build.gradle.kts create mode 100644 plugin-publish-with-shadow/src/main/java/com/my/plugin/MyPlugin.java diff --git a/plugin-publish-with-shadow/build.gradle.kts b/plugin-publish-with-shadow/build.gradle.kts new file mode 100644 index 000000000..a94116272 --- /dev/null +++ b/plugin-publish-with-shadow/build.gradle.kts @@ -0,0 +1,37 @@ +plugins { + `java-gradle-plugin` + id("com.gradle.plugin-publish") + id("com.gradleup.shadow") version "9.0.0-beta4" +} + +group = "com.my.plugin" +version = "1.0.0" + +dependencies { + implementation("com.google.code.gson:gson:2.11.0") + shadow("com.squareup.moshi:moshi:1.15.2") +} + +tasks.shadowJar { + archiveClassifier = "" +} + +gradlePlugin { + plugins { + create("myPlugin") { + id = "com.my.plugin" + implementationClass = "com.my.plugin.MyPlugin" + } + } +} + +publishing { + publications { + create("pluginMaven") { + artifactId = "my-gradle-plugin" + } + } + repositories { + maven(layout.buildDirectory.dir("maven-repo")) + } +} diff --git a/plugin-publish-with-shadow/src/main/java/com/my/plugin/MyPlugin.java b/plugin-publish-with-shadow/src/main/java/com/my/plugin/MyPlugin.java new file mode 100644 index 000000000..d80d22c9a --- /dev/null +++ b/plugin-publish-with-shadow/src/main/java/com/my/plugin/MyPlugin.java @@ -0,0 +1,11 @@ +package com.my.plugin; + +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.jetbrains.annotations.NotNull; + +public class MyPlugin implements Plugin { + @Override + public void apply(@NotNull Project project) { + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 4bb3ca1a1..df26052e6 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -45,3 +45,5 @@ dependencyResolutionManagement { rootProject.name = "shadow" enableFeaturePreview("STABLE_CONFIGURATION_CACHE") + +include(":plugin-publish-with-shadow") From 7120b03a84b31dce5a8b865c91eb1bd701618c5b Mon Sep 17 00:00:00 2001 From: Goooler Date: Sat, 18 Jan 2025 12:15:35 +0800 Subject: [PATCH 07/11] Revert "Add plugin-publish-with-shadow project for testing" This reverts commit eb90843ff4ed6235c70f1fa4356d582bf116164c. --- plugin-publish-with-shadow/build.gradle.kts | 37 ------------------- .../src/main/java/com/my/plugin/MyPlugin.java | 11 ------ settings.gradle.kts | 2 - 3 files changed, 50 deletions(-) delete mode 100644 plugin-publish-with-shadow/build.gradle.kts delete mode 100644 plugin-publish-with-shadow/src/main/java/com/my/plugin/MyPlugin.java diff --git a/plugin-publish-with-shadow/build.gradle.kts b/plugin-publish-with-shadow/build.gradle.kts deleted file mode 100644 index a94116272..000000000 --- a/plugin-publish-with-shadow/build.gradle.kts +++ /dev/null @@ -1,37 +0,0 @@ -plugins { - `java-gradle-plugin` - id("com.gradle.plugin-publish") - id("com.gradleup.shadow") version "9.0.0-beta4" -} - -group = "com.my.plugin" -version = "1.0.0" - -dependencies { - implementation("com.google.code.gson:gson:2.11.0") - shadow("com.squareup.moshi:moshi:1.15.2") -} - -tasks.shadowJar { - archiveClassifier = "" -} - -gradlePlugin { - plugins { - create("myPlugin") { - id = "com.my.plugin" - implementationClass = "com.my.plugin.MyPlugin" - } - } -} - -publishing { - publications { - create("pluginMaven") { - artifactId = "my-gradle-plugin" - } - } - repositories { - maven(layout.buildDirectory.dir("maven-repo")) - } -} diff --git a/plugin-publish-with-shadow/src/main/java/com/my/plugin/MyPlugin.java b/plugin-publish-with-shadow/src/main/java/com/my/plugin/MyPlugin.java deleted file mode 100644 index d80d22c9a..000000000 --- a/plugin-publish-with-shadow/src/main/java/com/my/plugin/MyPlugin.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.my.plugin; - -import org.gradle.api.Plugin; -import org.gradle.api.Project; -import org.jetbrains.annotations.NotNull; - -public class MyPlugin implements Plugin { - @Override - public void apply(@NotNull Project project) { - } -} diff --git a/settings.gradle.kts b/settings.gradle.kts index df26052e6..4bb3ca1a1 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -45,5 +45,3 @@ dependencyResolutionManagement { rootProject.name = "shadow" enableFeaturePreview("STABLE_CONFIGURATION_CACHE") - -include(":plugin-publish-with-shadow") From 8e1d10b2dc0b0bb43cb9c394d1a5eb828366ae40 Mon Sep 17 00:00:00 2001 From: Goooler Date: Sat, 18 Jan 2025 12:23:18 +0800 Subject: [PATCH 08/11] Apply com.gradle.plugin-publish and fix flaky tests --- build.gradle.kts | 1 + .../gradle/plugins/shadow/PublishingTest.kt | 24 ++++++++++--------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index f2346857b..20f9bdff9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -61,6 +61,7 @@ dependencies { implementation(libs.plexus.xml) testPluginClasspath(libs.foojayResolver) + testPluginClasspath(libs.pluginPublish) lintChecks(libs.androidx.gradlePluginLints) } diff --git a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt index c40206e2d..d7be1cf90 100644 --- a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt +++ b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt @@ -23,6 +23,7 @@ import kotlin.io.path.exists import kotlin.io.path.inputStream import kotlin.io.path.isRegularFile import kotlin.io.path.listDirectoryEntries +import kotlin.io.path.name import kotlin.io.path.readText import kotlin.io.path.writeText import org.apache.maven.model.Model @@ -100,19 +101,16 @@ class PublishingTest : BasePluginTest() { projectScriptPath.appendText( publishConfiguration( projectBlock = """ + apply plugin: 'com.gradle.plugin-publish' group = 'my.plugin' version = '1.0' - // Workaround for overriding the jar task output by shadowJar. - tasks.named('jar') { - archiveExtension = 'ignored' - } """.trimIndent(), shadowBlock = """ archiveClassifier = '' """.trimIndent(), publicationsBlock = """ - shadow(MavenPublication) { - from components.shadow + pluginMaven(MavenPublication) { + artifactId = 'my-gradle-plugin' } """.trimIndent(), ), @@ -120,16 +118,20 @@ class PublishingTest : BasePluginTest() { publish() - assertShadowJarCommon(repoJarPath("my/plugin/maven/1.0/maven-1.0.jar")) - assertPomCommon(repoPath("my/plugin/maven/1.0/maven-1.0.pom")) - assertShadowVariantCommon(gmmAdapter.fromJson(repoPath("my/plugin/maven/1.0/maven-1.0.module"))) + assertShadowJarCommon(repoJarPath("my/plugin/my-gradle-plugin/1.0/my-gradle-plugin-1.0.jar")) + assertPomCommon(repoPath("my/plugin/my-gradle-plugin/1.0/my-gradle-plugin-1.0.pom")) + assertShadowVariantCommon(gmmAdapter.fromJson(repoPath("my/plugin/my-gradle-plugin/1.0/my-gradle-plugin-1.0.module"))) - assertThat(repoJarPath("my/plugin/maven/1.0/maven-1.0.jar")).useAll { + assertThat(repoJarPath("my/plugin/my-gradle-plugin/1.0/my-gradle-plugin-1.0.jar")).useAll { transform { actual -> actual.entries().toList().map { it.name }.filter { it.endsWith(".class") } } .single().isEqualTo("my/plugin/MyPlugin.class") // Only the shadowed jar should be included. - transform { it.parent.listDirectoryEntries("*.jar") }.single() + transform { it.parent.listDirectoryEntries("*.jar").map(Path::name) }.containsOnly( + "my-gradle-plugin-1.0.jar", + "my-gradle-plugin-1.0-javadoc.jar", + "my-gradle-plugin-1.0-sources.jar", + ) } } From 7073d292007892dafeb8e6621b864d51a9afb791 Mon Sep 17 00:00:00 2001 From: Goooler Date: Sat, 18 Jan 2025 12:52:38 +0800 Subject: [PATCH 09/11] Tweak checks --- .../gradle/plugins/shadow/PublishingTest.kt | 28 ++++++++----------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt index d7be1cf90..e9128b690 100644 --- a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt +++ b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt @@ -6,7 +6,6 @@ import assertk.assertions.contains import assertk.assertions.containsOnly import assertk.assertions.isEmpty import assertk.assertions.isEqualTo -import assertk.assertions.single import com.github.jengelman.gradle.plugins.shadow.ShadowJavaPlugin.Companion.SHADOW_RUNTIME_ELEMENTS_CONFIGURATION_NAME import com.github.jengelman.gradle.plugins.shadow.util.GradleModuleMetadata import com.github.jengelman.gradle.plugins.shadow.util.Issue @@ -21,7 +20,6 @@ import java.nio.file.Path import kotlin.io.path.appendText import kotlin.io.path.exists import kotlin.io.path.inputStream -import kotlin.io.path.isRegularFile import kotlin.io.path.listDirectoryEntries import kotlin.io.path.name import kotlin.io.path.readText @@ -118,21 +116,18 @@ class PublishingTest : BasePluginTest() { publish() - assertShadowJarCommon(repoJarPath("my/plugin/my-gradle-plugin/1.0/my-gradle-plugin-1.0.jar")) - assertPomCommon(repoPath("my/plugin/my-gradle-plugin/1.0/my-gradle-plugin-1.0.pom")) - assertShadowVariantCommon(gmmAdapter.fromJson(repoPath("my/plugin/my-gradle-plugin/1.0/my-gradle-plugin-1.0.module"))) - - assertThat(repoJarPath("my/plugin/my-gradle-plugin/1.0/my-gradle-plugin-1.0.jar")).useAll { - transform { actual -> actual.entries().toList().map { it.name }.filter { it.endsWith(".class") } } - .single().isEqualTo("my/plugin/MyPlugin.class") + val artifactRoot = "my/plugin/my-gradle-plugin/1.0" + val jars = repoPath(artifactRoot).listDirectoryEntries("*.jar").map(Path::name) + assertThat(jars).containsOnly( + "my-gradle-plugin-1.0.jar", + "my-gradle-plugin-1.0-javadoc.jar", + "my-gradle-plugin-1.0-sources.jar", + ) - // Only the shadowed jar should be included. - transform { it.parent.listDirectoryEntries("*.jar").map(Path::name) }.containsOnly( - "my-gradle-plugin-1.0.jar", - "my-gradle-plugin-1.0-javadoc.jar", - "my-gradle-plugin-1.0-sources.jar", - ) - } + val artifactPrefix = "$artifactRoot/my-gradle-plugin-1.0" + assertShadowJarCommon(repoJarPath("$artifactPrefix.jar")) + assertPomCommon(repoPath("$artifactPrefix.pom")) + assertShadowVariantCommon(gmmAdapter.fromJson(repoPath("$artifactPrefix.module"))) } @Issue( @@ -301,7 +296,6 @@ class PublishingTest : BasePluginTest() { private fun repoPath(relative: String): Path { return remoteRepoPath.resolve(relative).also { check(it.exists()) { "Path not found: $it" } - check(it.isRegularFile()) { "Path is not a regular file: $it" } } } From b88fcb6afcc62b68bf0adf6f3f3cc9898a02ebeb Mon Sep 17 00:00:00 2001 From: Goooler Date: Sat, 18 Jan 2025 12:59:50 +0800 Subject: [PATCH 10/11] Note com.gradle.plugin-publish in plugin publication doc --- src/docs/plugins/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/docs/plugins/README.md b/src/docs/plugins/README.md index d0e107bf4..afc771dc5 100644 --- a/src/docs/plugins/README.md +++ b/src/docs/plugins/README.md @@ -12,7 +12,7 @@ A simple Gradle plugin can use this feature by applying the `shadow` plugin and ```groovy plugins { - id 'java-gradle-plugin' + id 'java-gradle-plugin' // May have to apply the latest `com.gradle.plugin-publish` for better publishing support. id 'com.gradleup.shadow' } From 667d1c1f035fa5908c6c8c137dc6e43a2c824bc3 Mon Sep 17 00:00:00 2001 From: Goooler Date: Sat, 18 Jan 2025 13:00:55 +0800 Subject: [PATCH 11/11] Cleanups --- .../github/jengelman/gradle/plugins/shadow/BasePluginTest.kt | 2 +- .../github/jengelman/gradle/plugins/shadow/PublishingTest.kt | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) 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 7b9704155..088095ef0 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 @@ -229,7 +229,7 @@ abstract class BasePluginTest { gradlePluginBlock = """ gradlePlugin { plugins { - create("myPlugin") { + create('myPlugin') { id = '$pluginId' implementationClass = '$pluginClass' } diff --git a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt index e9128b690..37a9fc37f 100644 --- a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt +++ b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/PublishingTest.kt @@ -117,8 +117,7 @@ class PublishingTest : BasePluginTest() { publish() val artifactRoot = "my/plugin/my-gradle-plugin/1.0" - val jars = repoPath(artifactRoot).listDirectoryEntries("*.jar").map(Path::name) - assertThat(jars).containsOnly( + assertThat(repoPath(artifactRoot).listDirectoryEntries("*.jar").map(Path::name)).containsOnly( "my-gradle-plugin-1.0.jar", "my-gradle-plugin-1.0-javadoc.jar", "my-gradle-plugin-1.0-sources.jar",