2013-02-08 64 views
0

Gradle中如何从子项目中调用父函数? 如果我有父项目和功能定义为:子项目调用父函数

def testMethod() { 
    println("TestMethod called from directory ${project.projectDir}") 
} 

和子项目为:

task subTest << { 
    println("I'm subTest task from ${project.projectDir}") 
    testMethod() 
} 

从命令行的结果调用此:

Could not find method testMethod() for arguments [] on root project 'subsys1' 
+0

它为我工作: $ gradle这个分测验 :网上开店战:分测验 我在C分测验任务:\ ... \从目录中称为网络商店\ WEB-店战 TestMethod的C:\ ... \ web-shop 您是否已将您的子项目定义为settings.gradle中的子项目? – huzi 2013-02-08 12:54:45

+0

是的,它在你从根项目目录中调用它时起作用 > gradle subsys1:subTest 但是我需要从subsys1目录调用 > gradle subTest //然后在构建Gradle的项目树时出现问题。当您从子项目中调用任务时,它与树方向相反。我需要设置父项目到子系统settings.gradle,所以它知道,在哪里寻找testMethod() – 2013-02-08 13:09:53

+1

你是什么意思与“在子系统settings.gradle”? Gradle只支持位于根项目中的整个项目树的一个settings.gradle。 – 2013-02-08 15:30:20

回答

1
Could not find method testMethod() for arguments [] on root project 'subsys1' 

就是说摇篮认为subsy1是根项目,而您的父项目应该是根项目。这意味着你有一个以上的settings.gradle,它认为subsys1是项目层次结构的开始。应该只有1 settings.gradle文件,它应该驻留在根项目中。在那里你配置每个子项目。他们没有得到他们自己的settings.gradle文件。

+0

基本上,你是对的。不过,我有三层体系,包括系统/子系统/模块。我意识到,如果我从系统级运行Gradle,它会使用顶级settings.gradle来配置子项目。但是我也需要支持子系统级别的一些操作,所以还需要额外的settings.gradle来配置模块。正如我在另一条评论中所描述的那样,我确实意识到我的testMethod()没有被找到,因为从子系统运行构建时组装了“反转”的项目层次结构。子系统本身就是造成上述问题的根本项目。 – 2013-02-10 14:57:18

+1

顶级settings.gradle还可以配置较低级别(模块)项目...只需使用正确的路径(:subsystem:module)引用它们即可, – 2013-02-11 10:47:16