我无法将额外的属性传递给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)
}
}
这个单元测试
public class TestPlugin {
@Test
public void testPlugin() {
Project project = ProjectBuilder.builder().build();
project.getPlugins().apply(TestPlugin.class);
Assert.assertTrue(project.getProject().getTasks().findByName("myTask") instanceof MyTask);
}
}
现在,当我运行测试时,它会显示无法找到dir属性的错误。
Caused by: groovy.lang.MissingPropertyException
我错过了什么吗?
答案 0 :(得分:0)
您的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
脚本的项目中(完成后)。