2015-07-21 173 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