我的Gradle项目中有子项目
因此,在我的bulid.gradle
文件中,我有如下代码:
void getDir() {
getProjectDir()
}
configure(project('SubProject')) {
getDir()
}
因此,现在
getProjectDir()
中的getDir()
返回MainProject
目录,但是我希望此调用返回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用作技巧:
1)将getDir方法转换为真正的Closure,
2)在从您的configure方法调用getDir闭包之前,设置目标委托(delegate)对象
以下代码应该工作:
// 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()
}