2014-01-15 34 views
0

首先,這是我第一次進入Gradle/Groovy(使用Gradle 1.10)。我正在建立一個多項目環境,我在一個項目中創建一個jar工件,然後想要在另一個項目中定義一個Exec任務,這個項目取決於創建的jar。我將其設置是這樣的:如何正確訪問Gradle配置對象

// 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任務,我只是測試,看看如何訪問罐子。所以問題是,爲什麼最後一個println會失敗?如果一個Configuration對象是一個Collection/Iterable,那麼當然我應該能夠索引它呢?

回答

2

Configuration is-a java.util.Iterable,但不是java.util.Collection。如在Groovy GDK文檔中可以看到的,getAt方法(其對應於[]運營商)在Collection上定義,但不在Iterable上定義。因此,你不能索引到Configuration

+0

謝謝@peter。正如你所指出的那樣,我正在研究'ConfigurationContainer'的API(它確實擴展了'Collection'),而不是'Configuration'。 –

+0

謝謝@Peter! –