在Gradle中,是否有支持静态方法获取项目实例的方法?

问题描述

我的构建具有一些静态实用程序方法,当前它们具有项目参数,因此它们可以访问任何内容包括根项目。但是有没有一种方法可以忽略该参数跳过,而只需使用类似的内容

Project rootProject = DefaultProject.project(":")

Gradle 6.6.1 API将Project定义为接口,并且其文档中未提及任何静态方法。我避免使用org.gradle.api.internal.project.软件包,但要坚持使用受支持的API。

解决方法

但是有一种方法可以忽略该参数跳过,而只需使用类似的内容:

您基本上可以在build lifecycle期间将全局静态变量分配给项目引用,但是不能保证project实例的状态:

public class MyUtil {
    
    private static Project project;
    
    public static void setProject(Project project) {
        MyUtil.project = project;
    }

}

Gradle 6.6.1 API将Project定义为接口,并且其文档中未提及任何静态方法。

Project界面就是Gradle项目。这是与项目进行交互的一种方式。

拥有一堆不参与Gradle构建生命周期的静态实用程序方法并不是最大的问题。相反,如果这些实用程序方法正在执行大量工作或对项目进行修改,请考虑将该逻辑迁移到custom Gradle plugin和/或custom Gradle tasks

这样做,Gradle将能够缓存并进行任何可能的优化,从而改善构建。