Gradle 向渐变任务传递额外属性时的问题
我在向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
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);