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()) {