Gradle 向渐变任务传递额外属性时的问题

Gradle 向渐变任务传递额外属性时的问题,gradle,groovy,Gradle,Groovy,我在向gradle任务传递额外属性时遇到问题。这是我的构建文件 buildscript { repositories { } ext { dir = '' } apply plugin: 'java' apply plugin: 'maven' apply plugin: 'groovy' group = 'group' version = 'version' sourceCompatibility = 1.8 targetCompatibility = 1.8 ta

我在向gradle任务传递额外属性时遇到问题。这是我的构建文件

buildscript {
    repositories {
}


ext {
    dir = ''
}

apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'groovy'

group = 'group'
version = 'version'

sourceCompatibility = 1.8
targetCompatibility = 1.8

task wrapper(type: Wrapper) {
    gradleVersion = '3.4'
}

repositories {

}
dependencies {
    compile gradleApi()
    compile localGroovy()

}
如您所见,我有一个额外的属性作为dir初始化为“”。现在,这是我的任务

class MyTask extends DefaultTask {
    File myDir = project.dir

    @TaskAction
    public void action() {
    }
}
我的插件

class MyPlugin implements Plugin<Project> {
    @Override
    def void apply(Project project) {
        project.tasks.create("myTask", MyTask)
    }

}
现在,当我运行测试时,它显示了一个错误,即找不到dir属性

Caused by: groovy.lang.MissingPropertyException 

我遗漏了什么吗?

您的
build.gradle
脚本和您的测试没有任何联系。在您的测试中,您创建了一个干净的新项目,您要做的第一件(也是唯一一件)事情是应用自定义插件,然后创建自定义任务。任务属性
myDir
将被设置,但被调用的属性
dir
在项目中不存在,因此引发异常

您可以为测试项目定义额外属性
dir

Project project = ProjectBuilder.builder().build();
project.ext.dir = ''
project.getPlugins().apply(TestPlugin.class);
Assert.assertTrue(project.getProject().getTasks().findByName("myTask") instanceof MyTask);

。。。或者将新插件应用到
build.gradle
脚本的项目中(完成后)。

为什么要将插件类传递给
project.tasks.create
?@OliverCharlesworth。复制时出错。修复了itproject.ext.dir=''不工作的问题。它找不到ext属性
Project project = ProjectBuilder.builder().build();
project.ext.dir = ''
project.getPlugins().apply(TestPlugin.class);
Assert.assertTrue(project.getProject().getTasks().findByName("myTask") instanceof MyTask);