首先,这是我第一次尝试Gradle / Groovy(使用Gradle 1.10)。我正在建立一个多项目环境,要在一个项目中创建一个jar Artifact ,然后要在另一个项目中定义一个Exec任务,具体取决于创建的jar。我正在设置像这样的东西:
// This is from the jar building project
jar {
...
}
configurations {
loaderJar
}
dependencies {
loaderJar files(jar.archivePath)
...
}
// From the project which consumes the built jar
configurations {
loaderJar
}
dependencies {
loaderJar project(path: ":gfxd-demo-loader", configuration: "loaderJar")
}
// This is my test task
task foo << {
configurations.loaderJar.each { println it }
println configurations.loaderJar.collect { it }[0]
// The following line breaks!!!
println configurations.loaderJar[0]
}
执行
foo
任务时,失败并显示:> Could not find method getAt() for arguments [0] on configuration ':loaderJar'.
在我的
foo
任务中,我正在测试以查看如何访问jar。所以问题是,为什么最后一个println失败?如果配置对象是一个Collection / Iterable,那么我当然应该能够对其进行索引? 最佳答案
Configuration
是-java.util.Iterable
,但不是java.util.Collection
。从Groovy GDK文档中可以看出,getAt
方法(对应于[]
运算符)是在Collection
上定义的,而不是在Iterable
上定义的。因此,您无法索引到Configuration
。