gradle - 将额外属性传递给Gradle任务的问题

标签 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

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/

相关文章:

java - 错误:Execution failed for task ':app:transformClassesWithAndroidGradleClassShrinkerForDebug'

android - 迁移到 Gradle 插件 3.0 后编译时出现 DexArchiveBuilderException

groovy - 为什么 Groovy 以这种方式执行浮点运算?

java - 使用groovy脚本在soapuI中迭代测试步骤

java - 我如何等待一个值改变?

java - 设置 Titan 和 Cassandra - 无法实例化存储管理器类

gradle - 使用 gradle 为每个主类构建 jar

gradle - flutter构建找不到依赖关系,但是当我将链接复制到浏览器时,它位于同一位置

Java Date 转换为 String 并返回 Date,相等性检查失败

spring-boot - 使用 gradle 创建修复名称不包括版本的 jar