2015-07-21 88 views
2

我的目標是有一個通用的類,其他構建文件可以在gradle中看到。我創建了一個名爲buildSrc的文件夾,它位於我的android項目的根目錄中。內容是這樣的:buildSrc gradle文件夾沒有編譯

class CountryFlavors { 

    def Closure getFlavor() { 
     return callback; 
    } 

Closure callback ={ 

    mock { 
     applicationId "ca.mysite.mock" 
    } 
    prod { 
     applicationId "ca.mysite.prod" 

    } 
} 

} 

從它指出一類投入buildSrc會自動把獲得相同的類路徑作爲我的Android構建腳本的文件夾的文件。但是,發生什麼事情是不能找到的類。我試圖在應用程序級別的build.gradle文件中引用該類,但無法找到該類。這裏是我打電話給班級CountryFlavors:

new CountryFlavors().getFlavor() 

編譯器公認該類無法找到。類文件位於buildSrc中,我將其命名爲「build.gradle」。爲了所有權原因,我在照片中刪除了根文件夾。我錯過了什麼? enter image description here

我的最終目標是有一個外部定義的類,可以返回一個閉包給我,我可以在我的構建腳本中使用。 @Opal

回答

2

嘗試把你的CountryFlavor類:

buildSrc/src/main/groovy/CountryFlavor.groovy 

https://docs.gradle.org/current/userguide/custom_tasks.html

要回答你的問題,我創建了一個簡單的項目。這是它的簡單的結構(I切割.gradle,包裝紙的gradle等):

C:. 
| build.gradle 
| settings.gradle 
|    
+---buildSrc 
| |    
| \---src 
|  \---main 
|   \---groovy 
|     CountryFlavors.groovy 

的build.gradle很簡單:

task myTask << { 
    println new CountryFlavors().getFlavor() 
} 

我投入getFlavor()方法:

println "This is my callback" 

輸出是:

gradle -q myTask 

This is my callback 
[email protected] 
+1

這是不夠的。 'package'也需要被定義,這樣的類**必須在gradle腳本的開頭被導入。 – Opal