首先,这是我第一次尝试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

10-04 11:59