diff --git a/subprojects/ivy/src/integTest/groovy/org/gradle/api/publish/ivy/IvyPublishArtifactCustomizationIntegTest.groovy b/subprojects/ivy/src/integTest/groovy/org/gradle/api/publish/ivy/IvyPublishArtifactCustomizationIntegTest.groovy index bacc460ad72c..50f761f3ce4c 100644 --- a/subprojects/ivy/src/integTest/groovy/org/gradle/api/publish/ivy/IvyPublishArtifactCustomizationIntegTest.groovy +++ b/subprojects/ivy/src/integTest/groovy/org/gradle/api/publish/ivy/IvyPublishArtifactCustomizationIntegTest.groovy @@ -25,12 +25,17 @@ class IvyPublishArtifactCustomizationIntegTest extends AbstractIvyPublishIntegTe void "can publish custom artifacts"() { given: createBuildScripts(""" + file("customFile.foo") << 'some foo' + file("customFile.bar") << 'some bar' + publications { ivy(IvyPublication) { artifact "customFile.txt" artifact customDocsTask.outputFile artifact regularFileTask.outputFile artifact customJar + artifact provider { file("customFile.foo") } + artifact provider { "customFile.bar" } } } """, """ @@ -46,7 +51,8 @@ class IvyPublishArtifactCustomizationIntegTest extends AbstractIvyPublishIntegTe then: module.assertPublished() - module.assertArtifactsPublished("ivy-2.4.xml", "ivyPublish-2.4.txt", "ivyPublish-2.4.html", "ivyPublish-2.4.reg", "ivyPublish-2.4.jar") + module.assertArtifactsPublished("ivy-2.4.xml", "ivyPublish-2.4.txt", "ivyPublish-2.4.foo", "ivyPublish-2.4.bar", "ivyPublish-2.4.html", "ivyPublish-2.4.reg", "ivyPublish-2.4.jar") + result.assertTasksExecuted(":customDocsTask", ":customJar", ":regularFileTask", ":generateDescriptorFileForIvyPublication", ":publishIvyPublicationToIvyRepository", ":publish") and: def ivy = module.parsedIvy @@ -54,11 +60,13 @@ class IvyPublishArtifactCustomizationIntegTest extends AbstractIvyPublishIntegTe ivy.expectArtifact('ivyPublish', 'html').hasType("html").hasConf(null) ivy.expectArtifact('ivyPublish', 'jar').hasType("jar").hasConf(null) ivy.expectArtifact('ivyPublish', 'reg').hasType("reg").hasConf(null) + ivy.expectArtifact('ivyPublish', 'foo').hasType("foo").hasConf(null) + ivy.expectArtifact('ivyPublish', 'bar').hasType("bar").hasConf(null) and: resolveArtifacts(module) { withoutModuleMetadata { - expectFiles "ivyPublish-2.4.html", "ivyPublish-2.4.jar", "ivyPublish-2.4.reg", "ivyPublish-2.4.txt" + expectFiles "ivyPublish-2.4.html", "ivyPublish-2.4.jar", "ivyPublish-2.4.reg", "ivyPublish-2.4.txt", "ivyPublish-2.4.foo", "ivyPublish-2.4.bar" } withModuleMetadata { noComponentPublished() diff --git a/subprojects/ivy/src/main/java/org/gradle/api/publish/ivy/internal/artifact/IvyArtifactNotationParserFactory.java b/subprojects/ivy/src/main/java/org/gradle/api/publish/ivy/internal/artifact/IvyArtifactNotationParserFactory.java index def421b47a64..72eec06202f8 100644 --- a/subprojects/ivy/src/main/java/org/gradle/api/publish/ivy/internal/artifact/IvyArtifactNotationParserFactory.java +++ b/subprojects/ivy/src/main/java/org/gradle/api/publish/ivy/internal/artifact/IvyArtifactNotationParserFactory.java @@ -19,6 +19,7 @@ import org.gradle.api.artifacts.PublishArtifact; import org.gradle.api.internal.file.FileResolver; import org.gradle.api.internal.tasks.TaskDependencyContainer; +import org.gradle.api.provider.Provider; import org.gradle.api.publish.ivy.IvyArtifact; import org.gradle.api.publish.ivy.internal.publisher.IvyPublicationIdentity; import org.gradle.api.tasks.bundling.AbstractArchiveTask; @@ -105,7 +106,15 @@ public void convert(Object notation, NotationConvertResult File file = fileResolverNotationParser.parseNotation(notation); IvyArtifact ivyArtifact = instantiator.newInstance(FileBasedIvyArtifact.class, file, publicationIdentity); if (notation instanceof TaskDependencyContainer) { - ivyArtifact.builtBy(notation); + TaskDependencyContainer taskDependencyContainer; + if (notation instanceof Provider) { + // wrap to disable special handling of providers by DefaultTaskDependency in this case + // (workaround for https://github.com/gradle/gradle/issues/11054) + taskDependencyContainer = context -> context.add(notation); + } else { + taskDependencyContainer = (TaskDependencyContainer) notation; + } + ivyArtifact.builtBy(taskDependencyContainer); } result.converted(ivyArtifact); } diff --git a/subprojects/maven/src/integTest/groovy/org/gradle/api/publish/maven/MavenPublishArtifactCustomizationIntegTest.groovy b/subprojects/maven/src/integTest/groovy/org/gradle/api/publish/maven/MavenPublishArtifactCustomizationIntegTest.groovy index a116ca5a4761..d0084ef01d6c 100644 --- a/subprojects/maven/src/integTest/groovy/org/gradle/api/publish/maven/MavenPublishArtifactCustomizationIntegTest.groovy +++ b/subprojects/maven/src/integTest/groovy/org/gradle/api/publish/maven/MavenPublishArtifactCustomizationIntegTest.groovy @@ -23,11 +23,16 @@ class MavenPublishArtifactCustomizationIntegTest extends AbstractMavenPublishInt def "can attach custom artifacts"() { given: createBuildScripts(""" + file("customFile.foo") << 'some foo' + file("customFile.bar") << 'some bar' + publications { mavenCustom(MavenPublication) { artifact "customFile.txt" artifact customJar artifact regularFileTask.outputFile + artifact provider { file("customFile.foo") } + artifact provider { "customFile.bar" } } } """) @@ -37,7 +42,8 @@ class MavenPublishArtifactCustomizationIntegTest extends AbstractMavenPublishInt then: def module = mavenRepo.module("group", "projectText", "1.0") module.assertPublished() - module.assertArtifactsPublished("projectText-1.0.pom", "projectText-1.0.txt", "projectText-1.0-customjar.jar", "projectText-1.0.reg") + module.assertArtifactsPublished("projectText-1.0.pom", "projectText-1.0.txt", "projectText-1.0.foo", "projectText-1.0.bar", "projectText-1.0-customjar.jar", "projectText-1.0.reg") + result.assertTasksExecuted(":customJar", ":regularFileTask", ":generatePomFileForMavenCustomPublication", ":publishMavenCustomPublicationToMavenRepository", ":publish") and: resolveArtifacts(module) { @@ -49,6 +55,24 @@ class MavenPublishArtifactCustomizationIntegTest extends AbstractMavenPublishInt expectFiles "projectText-1.0.txt" } } + resolveArtifacts(module) { + ext = 'foo' + withModuleMetadata { + noComponentPublished() + } + withoutModuleMetadata { + expectFiles "projectText-1.0.foo" + } + } + resolveArtifacts(module) { + ext = 'bar' + withModuleMetadata { + noComponentPublished() + } + withoutModuleMetadata { + expectFiles "projectText-1.0.bar" + } + } resolveArtifacts(module) { ext = 'reg' withModuleMetadata { diff --git a/subprojects/maven/src/main/java/org/gradle/api/publish/maven/internal/artifact/MavenArtifactNotationParserFactory.java b/subprojects/maven/src/main/java/org/gradle/api/publish/maven/internal/artifact/MavenArtifactNotationParserFactory.java index 1f50e87cba6e..05f185db516a 100644 --- a/subprojects/maven/src/main/java/org/gradle/api/publish/maven/internal/artifact/MavenArtifactNotationParserFactory.java +++ b/subprojects/maven/src/main/java/org/gradle/api/publish/maven/internal/artifact/MavenArtifactNotationParserFactory.java @@ -19,6 +19,7 @@ import org.gradle.api.artifacts.PublishArtifact; import org.gradle.api.internal.file.FileResolver; import org.gradle.api.internal.tasks.TaskDependencyContainer; +import org.gradle.api.provider.Provider; import org.gradle.api.publish.maven.MavenArtifact; import org.gradle.api.tasks.bundling.AbstractArchiveTask; import org.gradle.internal.Factory; @@ -105,7 +106,15 @@ public void convert(Object notation, NotationConvertResult context.add(notation); + } else { + taskDependencyContainer = (TaskDependencyContainer) notation; + } + mavenArtifact.builtBy(taskDependencyContainer); } result.converted(mavenArtifact); }