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()
}
我的 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()
}