groovy Gradle将构建脚本编译为脚本实现类?

rbl8hiat  于 2023-08-02  发布在  其他
关注(0)|答案(1)|浏览(86)

我在Gradle文档中读到了Learning more about build scripts页的下面一段:
当Gradle执行Groovy构建脚本(.gradle)时,它会将脚本编译成实现Script的类。因此,构建脚本可以访问Script接口声明的所有属性和方法。
我不明白这意味着什么。据我所知,在Java中,当类实现接口时,它需要实现接口声明的方法。这个怎么装在这里?

bq8i3lrv

bq8i3lrv1#

Gradle在幕后做了很多你看不到的domain-specific language(DSL)的“魔术”。
您在Gradle文件中看到的是一个不同于传统类的脚本,因此您的类规则本身并不适用。
Gradle的核心是用Java编写的。您可以通过浏览源代码here来自己看到这一点。Gradle特别针对Groovy DSL实现了各种Groovy语言功能,例如runtime and compile-time metaprogramming
特别是对于Groovy DSL,Gradle的Script类在内部实现了Groovy的Script类,如下所示。Groovy的script类声明:
Groovy编译器将为您编译类,并将脚本体复制到run方法中
因此,Gradle脚本的全部内容都放在run方法中:

// script contents
plugins {
    id 'java-library' 
}

repositories {
    mavenCentral() 
}

字符串

import org.codehaus.groovy.runtime.InvokerHelper

class Main extends Script {     
                
    def run() {                                 
        plugins {
            id 'java-library' 
        }
    
        repositories {
           mavenCentral() 
        }                
    }

    static void main(String[] args) {           
        InvokerHelper.runScript(Main, args)     
    }

}


这比这要多得多,但这是它的一般要点。

相关问题