I\'m writing a custom gradle plugin to handle some vaguely complicated work and I have run into a frustrating problem while using properties to configure some of the tasks that
EDIT
The below answer is now outdated. Since I provided it a better mechanism than convention mappings has been introduced for doing this called lazy properties.
The usual solution for this problem is to use convention mapping:
class MyPlugin implements Plugin {
void apply(Project project) {
project.extensions.create('myPluginProps', MyPluginExtension)
project.task(type: MyTask, 'thisTaskWorksIncorrectly') {
conventionMapping.input = { project.myPluginProps.message }
}
}
}
and then in the task:
class MyTask extends DefaultTask {
def String input
@TaskAction
def action() {
println "You gave me this: ${getInput()}"
}
}
Please note that I explicitly used getter for input
- the convention mapping won't kick in if you reference the field directly.