Problem with conventional mapping


I am developing custom plugin with custom task, which has a number of parameters. The parameters of custom task must have default values and the user of the plugin can override the values. I found in the documentation that conventional mapping should be used in this case.

Here is the part of custom task with fields:

class RebelGenerateTask extends DefaultTask {

def boolean showGenerated


def generate() { "rebel.showGenerated = " + isShowGenerated()

} }

Here is part of custom plugin, where RebelGenerateTask task is defined:

class RebelPlugin implements Plugin {

def void apply(Project project) {

project.extensions.rebel = new RebelPluginExtension()

RebelGenerateTask generateRebelTask = project.tasks.add(‘generateRebel’, RebelGenerateTask)

generateRebelTask.conventionMapping.showGenerated = { project.rebel.showGenerated }

} }

As you can see, I defined extension and here it is:

class RebelPluginExtension {

boolean showGenerated }

In my test project, I try to configure RebelPlugin plugin in this way:

apply plugin: ‘java’ apply plugin: ‘rebel’

buildscript {

repositories { mavenLocal() }

dependencies { classpath group: ‘org.zeroturnaround’, name: ‘gradle-jr-plugin’, version: ‘1.0-SNAPSHOT’ } }

rebel { showGenerated = true }

Unfortunately, the field RebelGenerateTask.showGenerated is always “false”. What I do wrong?

gradle version is

c:\projects\gradle-jr-plugin-demoApp>gradle --version

------------------------------------------------------------ Gradle 1.0-milestone-6 ------------------------------------------------------------

Gradle build time: neljapфev, 17. November 2011 5:54:12 UTC Groovy: 1.8.4 Ant: Apache Ant™ version 1.8.2 compiled on December 20 2010 Ivy: 2.2.0 JVM: 1.6.0_27 (Sun Microsystems Inc. 20.2-b06) OS: Windows 7 6.1 amd64

Thank you in advance!

Could you please fix the syntax highlighting?

I can’t find any “edit” button on this topic.

If I change the type of “showGenerated” to String, then the value is passed from build script to custom task. Why?

Convention mapping doesn’t work for primitive types. You have to use ‘Boolean’ instead of ‘boolean’.