[GRADLE-1982] Should disabling a task automatically remove any artifact it might publish? Created: 06/Dec/11 Updated: 10/Feb/17 Resolved: 10/Feb/17 |
|
Status: | Resolved |
Project: | Gradle |
Affects Version/s: | None |
Fix Version/s: | None |
Type: | Bug | ||
Reporter: | Gradle Forums | Assignee: | Unassigned |
Resolution: | Won't Fix | Votes: | 1 |
Attachments: | 0001-Added-conditional-omission-of-Ivy-artifacts-in-ivy-p.patch |
Description |
Is there a way to disable a task thereby also removing any artifact it might publish? For example, if anyone applies the `java` plugin but does not want sources being published, he/she should disable the `jarSource` task, but also search for its published artifact and remove it as well. In a more general case, I guess this might be handled with the following piece of code: tasks.withType(Jar) { if (...) it.enabled = false }afterEvaluate { configurations.all { artifacts.removeAll artifacts.findAll { it instanceof ArchivePublishArtifact && !it.archiveTask.enabled }} } Are there better ways to accomplish this? If not, are there any chances for Gradle providing similar fuctionality, so that users would just need to disable/remove a task and its artifacts would be removed automatically? Thanks, |
Comments |
Comment by Gradle Forums [ 06/Dec/11 ] |
It doesn't, and doesn't even attempt to. [This issue]([1]http://forums.gradle.org/gradle/topic...) is related. I've turned this into a problem and raised it as something to be solved. |
Comment by Mark Maxey [ 16/Apr/12 ] |
I had a similar, but not identical issue. In my case, the output of tasks were used as inputs for associating artifacts with configurations. My problem was that the tasks were not executed because they didn't have any input files. While the artifacts of that task would never be created, the configuration was still linked to the artifact. This caused me problems when resolving dependencies of that configuration because the artifact wouldn't exist and the consumer of the resolved artifacts didn't know whether that was a good or bad thing. My solution was to conditionally add artifacts to configurations. If the source set (or whatever task inputs) didn't exist for the task, then not only would I skip the task, I would not add any of that task's artifacts to my various configurations. I couldn't get there 100%, though, because the Java class JAR is added to various configurations (by the Java plugin I'm guessing). |
Comment by Tim Enderling [ 16/Jul/13 ] |
Added a patch that allows to specify an "onlyIf" closure/spec on an IvyArtifact, which will be evaluated just before the module descriptor is generated and the files to publish are determined. If the closure/spec return false, the artifact is omitted from both the descriptor and the upload. A minimal integration test is included. Regarding Please consider adding this Contribution to your next release! |
Comment by Benjamin Muschko [ 15/Nov/16 ] |
As announced on the Gradle blog we are planning to completely migrate issues from JIRA to GitHub. We intend to prioritize issues that are actionable and impactful while working more closely with the community. Many of our JIRA issues are inactionable or irrelevant. We would like to request your help to ensure we can appropriately prioritize JIRA issues you’ve contributed to. Please confirm that you still advocate for your JIRA issue before December 10th, 2016 by:
We look forward to collaborating with you more closely on GitHub. Thank you for your contribution to Gradle! |
Comment by Benjamin Muschko [ 10/Feb/17 ] |
Thanks again for reporting this issue. We haven't heard back from you after our inquiry from November 15th. We are closing this issue now. Please create an issue on GitHub if you still feel passionate about getting it resolved. |