After upgrading from gradle 1.6 to 1.7, a custom plugin we’re using in our build started failing with a NullPointerException.
It turned out to happen because we were using the groovy ToString annotation on the class.
Example:
import groovy.transform.ToString
import org.gradle.api.DefaultTask
@ToString()
class FailingTask extends DefaultTask {
String myProp="hello"
}
And a test for this task:
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.testfixtures.ProjectBuilder
import org.junit.Rule
import org.junit.rules.TemporaryFolder
import spock.lang.Specification
class TaskSpec extends Specification {
@Rule public TemporaryFolder folder = new TemporaryFolder();
def "can add task with ToString annotation to project"() {
setup:
ProjectBuilder builder = ProjectBuilder.builder()
Project project = builder.withProjectDir(folder.newFolder()).build()
Task task = project.task('task1', type: FailingTask)
expect:
task instanceof FailingTask
}
}
Fails with a NullPointerException. If the ToString annotation is replaced with an explicit toString implementation, then everything works as expected.