gradle - 使用扩展中的参数配置自定义插件

标签 gradle

嗨,我正在尝试根据插件扩展值动态创建和配置任务,问题似乎是评估顺序,是否有任何解决方法?

apply plugin: SetupPlugin 

setup {
     destDir = 'some directory set per project in build.gradle'
     sourceFile = 'some file set per project in build.gradle' 
}


class PluginExtension {
    String destDir
    String sourceFile
}

class SetupPlugin implements Plugin<Project> {
    def placeholders

    void apply(Project project) {
        project.extensions.create("setup", PluginExtension)

        project.task ("setupEnvironment", type: Copy) {
            doFirst() {
                //computes placeholders <-- project.setup has value here
            }

            into (project.setup.destDir){ //<-- project.setup is null
                from project.setup.sourceFile
            }
            filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: placeholders)
        }   
    }
}

最佳答案

将其移入doFirst块可能会产生一些副作用,因为随着执行时间(而不是配置时间)重新配置复制任务的参数,最新的gradle任务可能会遇到问题。一个可以解决问题的方法是使用闭包延迟评估:

...
void apply(Project project) {
        project.extensions.create("setup", PluginExtension)

        project.task ("setupEnvironment", type: Copy) {
            doFirst() {
                //computes placeholders <-- project.setup has value here
            }

            into {project.setup.destDir}
            from { project.setup.sourceFile }
            filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: placeholders)
        }   
}
...

希望对您有所帮助!

干杯,
雷内

关于gradle - 使用扩展中的参数配置自定义插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15822825/

相关文章:

android - 如何在Android依赖项中添加一行?

gradle - 插件扩展名与任务名称冲突

android - 任务 ':app:transformClassesWithJarMergingForDebug'的执行失败

gradle - 无法使用 gradle 编译虚拟类

导致内核崩溃的 Java 8 gradle 脚本

spring - 跨多个 Gradle 项目重用 spring 测试上下文

android - Gradle 找不到参数 [23.0.2] 的方法 buildToolsVersion(),但构建工具版本确实存在

android - 从Android的jacoco代码覆盖率中排除软件包

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

android - gradle 依赖和基于 XML 的依赖之间的区别