Skip to content

Instantly share code, notes, and snippets.

@facewindu
Created May 9, 2015 14:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save facewindu/70a91a63e563a66f9809 to your computer and use it in GitHub Desktop.
Save facewindu/70a91a63e563a66f9809 to your computer and use it in GitHub Desktop.
SSCCE finalizedBy Gradle 2.3 / 2.4
apply plugin: MyPlugin
apply plugin: 'java'
//configure in the build script the publication
publishing {
publications{
ivy(IvyPublication){ organisation 'foo' }
}
}
class MyPlugin implements Plugin<Project> {
void apply(Project project) {
//apply ivy publish plugin
project.pluginManager.apply(IvyPublishPlugin)
// add repo to project repos
project.repositories { ivy { url "$project.projectDir/ivyRepo" } }
//add all project repo to ivy publish repos
project.repositories.all { repo ->
if(repo instanceof IvyArtifactRepository){
project.getExtensions().configure(PublishingExtension, new org.gradle.api.internal.ClosureBackedAction<PublishingExtension>({ repositories.add(repo) }))
}
}
//create a custom task
project.tasks.create('customTask', CustomTask)
}
@RuleSource
static class Rule {
@Finalize
public void addFinalizeOnCustomTask(org.gradle.api.tasks.TaskContainer tasks){
tasks.withType(CustomTask).each {myTask ->
println myTask
tasks.withType(org.gradle.api.publish.ivy.tasks.PublishToIvyRepository).each{
println it
myTask.finalizedBy it
}
}
}
}
}
class CustomTask extends org.gradle.api.DefaultTask{}
apply plugin: MyPlugin
apply plugin: 'java'
//configure in the build script the publication
publishing {
publications{
ivy(IvyPublication){ organisation 'foo' }
}
}
class MyPlugin implements Plugin<Project> {
void apply(Project project) {
//apply ivy publish plugin
project.pluginManager.apply(IvyPublishPlugin)
// add repo to project repos
project.repositories { ivy { url "$project.projectDir/ivyRepo" } }
//add all project repo to ivy publish repos
project.repositories.all { repo ->
if(repo instanceof IvyArtifactRepository){
project.getExtensions().configure(PublishingExtension, new org.gradle.api.internal.ClosureBackedAction<PublishingExtension>({ repositories.add(repo) }))
}
}
//create a custom task
project.tasks.create('customTask', CustomTask)
}
static class Rule extends RuleSource{
@Finalize
public void addFinalizeOnCustomTask(org.gradle.api.tasks.TaskContainer tasks){
tasks.withType(CustomTask).each {myTask ->
println myTask
tasks.withType(org.gradle.api.publish.ivy.tasks.PublishToIvyRepository).each{
println it
myTask.finalizedBy it
}
}
}
}
}
class CustomTask extends org.gradle.api.DefaultTask{}
C:\Francois\workspaceLuna\GradleConsumer>gradlew clean customTask
task ':customTask'
task ':publishIvyPublicationToIvyRepository'
:clean UP-TO-DATE
:customTask UP-TO-DATE
:generateDescriptorFileForIvyPublication
:publishIvyPublicationToIvyRepository
BUILD SUCCESSFUL
C:\Francois\workspaceLuna\GradleConsumer>gradlew clean customTask
task ':customTask'
:clean
:customTask UP-TO-DATE
BUILD SUCCESSFUL
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment