我遇到了gradle / groovy的奇怪行为。
我有bulid.gradle
看起来像这样:
def elastic(notation, projectName) {
if (allprojects.find { it.name == projectName }) {
println "adding project dependency on project $projectName"
project(projectName)
} else {
println "adding binary dependency on project $projectName"
dependencies.create(notation)
}
}
dependencies {
elastic('my.group:myProject:1.0','myProject')
}
如果没有名称为myProject
的项目,则此函数返回二进制依赖项,否则返回项目依赖项。
但这不是重点。我在不同的项目中使用这个功能很安静,效果很好。但为了避免冗余代码我试图外化该功能。我将其放入define_elastic_1.gradle
并将该文件应用于我的build.gradle
。现在它看起来像是:
apply from: "file://entw1/ENTWICKLUNG/GfOPGradleRepo/define_elastic_1.gradle"
dependencies{
elastic('my.group:myProject:1.0','myProject')
}
但当我做gradle build
时,它会说
Could not find method elastic() for arguments [my.group:myProject:1.0, myProject] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
你知道为什么我不能使用一个单独的文件定义的函数吗?
答案 0 :(得分:3)
尝试将函数定义为闭包,并通过ext
中的define_elastic_1.gradle
:
ext.elastic = { notation, projectName ->
if (allprojects.find { it.name == projectName }) {
println "adding project dependency on project $projectName"
project(projectName)
} else {
println "adding binary dependency on project $projectName"
dependencies.create(notation)
}
}
答案 1 :(得分:2)
在我看来,此功能应该与DependencyHandler相关联,而不是@opal
建议的Project例如:
dependencies.ext.elastic = { notation, projectName ->
// do stuff
}
dependencies {
elastic('my.group:myProject:1.0','myProject')
}