gpt4 book ai didi

groovy - Gradle Native - 在存储库中动态添加库

转载 作者:行者123 更新时间:2023-12-03 03:33:36 24 4
gpt4 key购买 nike

我在 Gradle 中移植了几个 Makefile 项目。我希望对每个依赖项进行版本控制,因此我创建了一个通用 gradle 文件,即 general.gradle,它包含在每个特定的 build.gradle 文件中。对于每个项目,还有一个文件 dependencies.gradle,其中包含一个映射 {dependencyName, version}。这里有一个例子:

ext.versions  = [:]    
versions.'libraryA'= "8a3f32"
versions.'libraryB'= "4af3e5"

我在 general.gradle 中声明 libraryX 所指的内容,将库插入存储库中,如下所示:
repositories {        
libs(PrebuiltLibraries) {
libraryA {
def libraryName = "${name}"
headers.srcDir "../${libraryName}"
binaries.withType(SharedLibraryBinary) {
sharedLibraryFile = file("${baseDir}/lib/${targetPlatform.name}/${buildType.name}/lib${libraryName}_" + versions."${libraryName}" + ".so")
}
}

libraryB {
def libraryName = "${name}"
headers.srcDir "../${libraryName}"
binaries.withType(SharedLibraryBinary) {
sharedLibraryFile = file("${baseDir}/lib/${targetPlatform.name}/${buildType.name}/lib${libraryName}_" + versions."${libraryName}" + ".so")
}
}

libraryC {....}
libraryD {....}
}

通过这种方式,我还可以根据构建类型(调试或发布)和平台(x86 或 x86_64)设置正确的路径。

如您所见,在每个 libraryX 内部都有完全相同的代码。我想知道是否可以使用列表来避免这种不必要的重复
libraries = [ "libraryA", "libraryB", ...]

我试着做:
repositories {        
libs(PrebuiltLibraries) {
[ "libraryA", "libraryB", ...].each {
it {
def libraryName = "${name}"
headers.srcDir "../${libraryName}"
binaries.withType(SharedLibraryBinary) {
sharedLibraryFile = file("${baseDir}/lib/${targetPlatform.name}/${buildType.name}/lib${libraryName}_" + versions."${libraryName}" + ".so")
}
}
}
}

但我收到了这个错误:
Exception thrown while executing model rule: model.repositories   > No signature of method: java.lang.String.call() is applicable for argument types: (general_dt1njom2wz075lo490p9e44em$_run_closure3_closure24_closure25_closure26_closure29) values: 
[general_dt1njom2wz075lo490p9e44em$_run_closure3_closure24_closure25_closure26_closure29@2b2954e1]
Possible solutions: wait(), any(), wait(long), take(int), each(groovy.lang.Closure), any(groovy.lang.Closure)

任何的想法?

谢谢,
毛罗

最佳答案

在这种情况下itString多变的:

[ "libraryA", "libraryB", ...].each {
it {

你不能调用它,它不是一种方法。

您要调用的方法委托(delegate)给闭包,在第三方上下文中定义,但您可以使用 delegate 引用它:
[ "libraryA", "libraryB", ...].each {
delegate."$it" {

另见: http://docs.groovy-lang.org/latest/html/documentation/#_delegation_strategy

关于groovy - Gradle Native - 在存储库中动态添加库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30501783/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com