Gradle。调用 getProjectDir() returns 不是预期的目录

Gradle. Calling getProjectDir() returns not the dir that expected

我的 Gradle 项目中有子项目

所以,在我的 bulid.gradle 文件中,我有这样的代码:

void getDir() {
    getProjectDir()
}

configure(project('SubProject')) {
    getDir()
}

所以,现在 getProjectDir()getDir() returns MainProject 目录中,但我想调用 return SubProject 目录。

希望得到您的帮助,在此先感谢

您提供的代码是根项目构建脚本的一部分,因此 Gradle 将以主(根)项目实例作为上下文执行:在这种情况下,getProjectDir() 调用被删除到根这就是返回 MainProject 目录的项目实例。

我认为您的方法 "getDir" 应该将 Project 实例作为参数,然后您可以这样写:

void getDir(Project proj) {
    def dir =  proj.getProjectDir()
    println "Directory is : " + dir
}

configure(project('SubProject')) { proj ->
    getDir(proj)
}

编辑

如果您想避免将 Project 实例作为参数传递,那么您可以使用 Groovy Closer 作为 hack:

1) 将getDir方法转化为真正的闭包,

2) 在从您的配置方法调用 getDir 闭包之前,设置目标委托对象

以下代码应该有效:

// a closure that invoke getProjectDir on the delegate Project
def getDir = { 
    println "project directory is: " + getProjectDir() 
}

configure(project('subproject')) { proj ->
    // set closure target delegate to SubProject instance 
    getDir.delegate = proj 
    getDir() 
}