我在将额外的属性传递给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
我想念什么吗?
最佳答案
您的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
脚本的项目(完成后)。
关于gradle - 将额外属性传递给Gradle任务的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43288896/