如何在Build Gradle任务中使用start参数?

时间:2012-10-20 16:19:14

标签: gradle

我想将deployDir(值为/my_archive)传递给uploadArchives中的my_project任务:

task build (type: GradleBuild) {
        buildFile = './my_project/build.gradle'
        tasks = ['uploadArchives']
        /* startParameter =  [deployDir:"/my_archive"] ??? */      
}

我不知道如何声明启动参数。我尝试了不同的方法,例如,

startParameter = [deployDir:"/my_archive"]

没有成功。

如何在GradleBuild任务中声明startParameter

2 个答案:

答案 0 :(得分:19)

我认为您的意思是将deployDir作为project property传递。在这种情况下,您会发现可以使用setProjectProperties(Map)方法:

task build (type: GradleBuild) {
    buildFile = './my_project/build.gradle'
    tasks = ['uploadArchives']
    startParameter.projectProperties = [deployDir: "/my_archive"]
}

这使您可以从被调用的构建脚本中访问deployDir作为变量:

uploadArchives {
 repositories {
  mavenDeployer {
   repository(url: deployDir)
   // --- or, if deployDir can be empty ---
   repository(url: project.properties.get('deployDir', 'file:///default/path'))
  }
 }
}

答案 1 :(得分:0)

我们可以通过api

设置项目属性和系统属性
setProjectProperties(Map<String,String> projectProperties)  
setSystemPropertiesArgs(Map<String,String> systemPropertiesArgs) 

这是我本地的startParameter样本:

task startBuild(type: GradleBuild) {
StartParameter startParameter = project.gradle.startParameter;

Iterable<String> tasks = new ArrayList<String>();
Iterable<String> excludedTasks = new ArrayList<String>();

startParameter.getProjectProperties().each { entry ->
    println entry.key + " = " + entry.value;

    if(entry.key.startsWith('t_')){
        tasks << (entry.key - 't_');
    }

    if(entry.key.startsWith('build_') && "true" == entry.value){
        tasks << (':' + (entry.key - 'build_') +':build');
    }

    if(entry.key.startsWith('x_') && "true" == entry.value){
        excludedTasks << (entry.key - 'x_');
    }
}

startParameter.setTaskNames(tasks);
startParameter.setExcludedTaskNames(excludedTasks);

println startParameter.toString();
}

我们可以通过此链接StartParameter

引用api

当您需要自定义gradle构建逻辑时,startparameter在gradle中非常强大。