如何从方法中获取项目并调用其“编译”方法?

时间:2017-12-13 22:17:48

标签: java gradle groovy build.gradle

我有一个方法可以通过compilecompile project知道是否包含依赖项。但当我做第二个时,它说:

  

找不到类型为org.gradle.api.Project的项目':parent-lib'上的参数[project':my-lib']的方法compile()

如何在方法内对项目进行编译?

ext.includeSpecial = {moduleName ->

    //...elided...

    compile project( ":${moduleName}" )
}

dependencies {

    //This works
    //compile project(':my-lib')

    //But this does not
    includeSpecial( "my-lib" )
}

1 个答案:

答案 0 :(得分:1)

不要尝试调用compile方法,它只为一些隐藏的Dependency Handler类定义,而是定义一个返回参数的方法来编译/ 在dependencies闭包内,您可以编写groovy代码并调用方法,例如:

def specialDependency() {
   // if / else
}


dependencies {
    compile specialDependency()
}

您可以获得更多结果,例如https://discuss.gradle.org/t/programmatically-adding-dependencies/7575/12 通过搜索“以编程方式在gradle中添加依赖项”。

更多解释,gradle实际上不是声明性的,因此依赖性阻止

dependencies {
    compile "foo"
}

实际上是一个闭包,与此相同:

project.dependencies({DependencyHandler handler ->
    handler.compile("foo");
})