本来是想直接在build文件里配置变量如何直接apply插件的时候就能使用的,发现不行
public class PluginImpl implements Plugin<Project> { void apply(Project project) { project.extensions.create('pluginExt', PluginExtension) project.pluginExt.extensions.create('nestExt', PluginNestExtension) project.task('customTask', type: CustomTask) /* project.task('testTask') << { println "Hello gradle plugin" }*/ } }
例如上面我扩展的两个变量
然后在在build文件中使用
pluginExt { param1 = 'app param1' param2 = 'app param2' nestExt{ nestParam1='app nestParam1' nestParam2='app nestParam2' } }
在TASK中得到
public class CustomTask extends DefaultTask{ @TaskAction void output() { println "param1 is ${project.pluginExt.param1}" println "param2 is ${project.pluginExt.param2}" println "param3 is ${project.pluginExt.param3}" println "nestparam1 is ${project.pluginExt.nestExt.nestParam1}" println "nestparam2 is ${project.pluginExt.nestExt.nestParam2}" println "nestparam3 is ${project.pluginExt.nestExt.nestParam3}" } @TaskAction void test(){ } }
这样我执行这个TASK的时候这些变量自然可以拿到,但是我希望在apply 插件的时候,就应该能拿到配置的这些变量对应的值,
实际测试发现不行,因为apply的时候值还没得到赋值,假如我把apply 插件放置在赋值语句后,构建就会失败,因为apply的时候才创建了那些变量,
先赋值的话那些变量实际还没有被创建,为了解决apply 插件的时候能够拿到配置的变量,我仿照听云,在项目的根目录下建立个proerties属性文件
,插件通过读取该属性文件获取相关配置信息,现在给出读取属性文件的代码
package com.haiziwang.bury
class ReadProperties {
def initProperties() {
//String filename = "D:\\test\\rkhy_bury.xlsx";
String relativelyPath=System.getProperty("user.dir");// D:\androidprogram\rkapp\trunk
println "property " + relativelyPath;
String filename = relativelyPath+"\\kidbury.properties";
def props = new java.util.Properties();
props.load( new java.io.FileInputStream(filename));
Enumeration<String> e = props.keys();
/**
* android_sdk_path=D:\\adt\\sdk\\platforms\\android-23\\android.jar
bury_excel_path=D:\\test\\rkhy_bury.xlsx
*/
String val1 = props.get("import_path");
String val2 = props.get("bury_excel_path");
String val3 = props.get("package_name");
String val4 = props.get("import_class");
if(val1 != null){
String[] ss = val1.split(";")
BuryConfig.import_path=ss;
}
if(val4 != null){
String[] ss = val4.split(";")
BuryConfig.import_class=ss;
}
BuryConfig.bury_excel_path=val2;
BuryConfig.package_name=val3;
println "importpath: "+ val1 + " excel: " + BuryConfig.bury_excel_path+"package:"+ BuryConfig.package_name+"import_class:"+val4;
/* while (e.hasMoreElements())
{
String key = e.nextElement();
String val = props.get(key);
println "property " + key + " value: " + val;
}*/
}
static void main(args) {
def app = new ReadProperties();
app.initProperties();
}
}
属性文件内容如下
bury_excel_path=D:\\test\\rkhy_bury.xlsx
package_name=com\\haiziwang\\customapplication
import_class=com.haiziwang.customapplication.report.api.ReportPoint;com.haiziwang.customapplication.report.api.ReportClient
import_path=D:\\adt\\sdk\\platforms\\android-23\\android.jar