From 66139821c8c7c7ad74910ac1f3e84a2dfe7abe04 Mon Sep 17 00:00:00 2001 From: Jendrik Johannes Date: Wed, 11 Sep 2019 15:34:03 +0200 Subject: [PATCH] Restore behavior of pom packaging changing the main artifact extension This restores the behavior before #9445 (before 5.6) and with that fixes #10555. The behavior for non-jar packaging is still problematic and should be changed for 6.0 as it leads to broken Gradle Module Metadata. --- .../MavenPublishPomPackagingIntegTest.groovy | 19 +++++++++++++++++++ .../publisher/AbstractMavenPublisher.java | 7 ++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/subprojects/maven/src/integTest/groovy/org/gradle/api/publish/maven/MavenPublishPomPackagingIntegTest.groovy b/subprojects/maven/src/integTest/groovy/org/gradle/api/publish/maven/MavenPublishPomPackagingIntegTest.groovy index 79fcfbd2ea7e..77d4f78f90b3 100644 --- a/subprojects/maven/src/integTest/groovy/org/gradle/api/publish/maven/MavenPublishPomPackagingIntegTest.groovy +++ b/subprojects/maven/src/integTest/groovy/org/gradle/api/publish/maven/MavenPublishPomPackagingIntegTest.groovy @@ -133,6 +133,25 @@ class MavenPublishPomPackagingIntegTest extends AbstractMavenPublishIntegTest { mavenModule.assertArtifactsPublished("publishTest-1.9.foo", "publishTest-1.9.pom") } + def "can specify packaging for known jar packaging without changing artifact extension"() { + given: + createBuildScripts """ + pom.packaging "ejb" + + artifact("content.txt") { + extension "jar" + } +""" + + when: + succeeds "publish" + + then: + mavenModule.assertPublished() + mavenModule.parsedPom.packaging == 'ejb' + mavenModule.assertArtifactsPublished("publishTest-1.9.jar", "publishTest-1.9.pom") + } + def "can specify packaging with multiple unclassified artifacts"() { given: createBuildScripts """ diff --git a/subprojects/maven/src/main/java/org/gradle/api/publish/maven/internal/publisher/AbstractMavenPublisher.java b/subprojects/maven/src/main/java/org/gradle/api/publish/maven/internal/publisher/AbstractMavenPublisher.java index 05d2e9e02a10..4337e1e68097 100644 --- a/subprojects/maven/src/main/java/org/gradle/api/publish/maven/internal/publisher/AbstractMavenPublisher.java +++ b/subprojects/maven/src/main/java/org/gradle/api/publish/maven/internal/publisher/AbstractMavenPublisher.java @@ -16,6 +16,7 @@ package org.gradle.api.publish.maven.internal.publisher; +import com.google.common.collect.ImmutableSet; import org.apache.maven.artifact.repository.metadata.Metadata; import org.apache.maven.artifact.repository.metadata.Versioning; import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader; @@ -41,11 +42,13 @@ import java.io.IOException; import java.net.URI; import java.nio.charset.StandardCharsets; +import java.util.Set; import static org.apache.maven.artifact.ArtifactUtils.isSnapshot; abstract class AbstractMavenPublisher implements MavenPublisher { private static final Logger LOGGER = LoggerFactory.getLogger(MavenPublisher.class); + private static final Set JAR_PACKAGINGS = ImmutableSet.of("jar", "ejb", "bundle", "maven-plugin", "eclipse-plugin"); private static final String POM_FILE_ENCODING = "UTF-8"; private final Factory temporaryDirFactory; @@ -76,7 +79,9 @@ protected void publish(MavenNormalizedPublication publication, ExternalResourceR } if (publication.getMainArtifact() != null) { - artifactPublisher.publish(null, publication.getPackaging(), publication.getMainArtifact().getFile()); + String packaging = publication.getPackaging(); + String extension = packaging == null || JAR_PACKAGINGS.contains(packaging) ? publication.getMainArtifact().getExtension() : packaging; + artifactPublisher.publish(null, extension, publication.getMainArtifact().getFile()); } artifactPublisher.publish(null, "pom", publication.getPomArtifact().getFile()); for (MavenArtifact artifact : publication.getAdditionalArtifacts()) {