Is it ok to set task classes as properties for convenience when writing plugins?


(thirsch81) #1

Like in

@Override
public void apply(Project project) {
    project.with {
        ext {
            MyTask = my.company.package.MyTask
        }
        // ...
    }
}

so when people use the plugin, they can just go:

apply plugin: 'my-plugin'
  task myTask(type: MyTask)

I’m just wondering about the ramifications this might have.


(Luke Daley) #2

It’s generally not a good idea.

Plugins shouldn’t touch the ‘ext’ space because it’s a flat namespace and is difficult to trace. That is, in the case of a naming conflict it’s going to be difficult for the user to debug what’s going on.

I’d recommend putting all your tasks in one package and having the user do a star import.