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/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' } 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 836c4648b..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 @@ -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,8 @@ 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 import kotlin.io.path.writeText import org.apache.maven.model.Model @@ -36,6 +36,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 +92,43 @@ 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 = """ + apply plugin: 'com.gradle.plugin-publish' + group = 'my.plugin' + version = '1.0' + """.trimIndent(), + shadowBlock = """ + archiveClassifier = '' + """.trimIndent(), + publicationsBlock = """ + pluginMaven(MavenPublication) { + artifactId = 'my-gradle-plugin' + } + """.trimIndent(), + ), + ) + + publish() + + val artifactRoot = "my/plugin/my-gradle-plugin/1.0" + 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", + ) + + val artifactPrefix = "$artifactRoot/my-gradle-plugin-1.0" + assertShadowJarCommon(repoJarPath("$artifactPrefix.jar")) + assertPomCommon(repoPath("$artifactPrefix.pom")) + assertShadowVariantCommon(gmmAdapter.fromJson(repoPath("$artifactPrefix.module"))) + } + @Issue( "https://github.com/GradleUp/shadow/issues/860", "https://github.com/GradleUp/shadow/issues/945", @@ -256,7 +295,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" } } }