gradle - 在init.gradle任务中访问项目构建变量

标签 gradle build.gradle

我试图弄清楚如何在build.gradle中设置变量并在init.gradle脚本中访问该变量。

请在下面找到示例构建脚本:-

gradle.allprojects{

    task CommonTasks{
        println "CommonTasks - loaded"
    }

    CommonTasks.doFirst{
        println "CommonTasks - doFirst : here i want to use variable, that is declared in project build"
    }

    CommonTasks.doLast{
        println "CommonTasks - doLast"
    }

}

也可以在下面的示例项目构建中找到:-
apply plugin : 'java'

//some-where here i want to pass a variable in CommonTasks
clean.dependsOn CommonTasks

请在init.gradle页面上建议如何访问项目build.gradle变量(例如,字符串或文件类型)。

最佳答案

在很大程度上,您只需要注意所有代码在哪个阶段中运行即可。运行gradle <some task>命令时,Gradle分为三个阶段。

  • 初始化-处理init.gradle脚本,settings.gradle脚本,通常只获取定义的项目结构
  • 配置-处理所有项目的build.gradle脚本
  • 执行-执行所请求的任务

  • 重要的是,您可以将init.gradle脚本中的代码执行延迟到以后的阶段。我在下面的示例中包含了打印语句,以帮助说明何时执行此代码。

    您想要的一种选择是在任务或项目的初始化阶段声明属性(我的示例在任务中显示了该属性)。这样,您可以确定属性是在doFirst中引用该属性时定义的。您的build.gradle只需要在配置时设置该变量。

    init.gradle
    println 'init.gradle: In initialization phase'
    gradle.allprojects {
      task CommonTasks {
        println 'init.gradle: In configuration phase'
        ext.myVar = null
        println "Value of myVar=${myVar}"
        doFirst {
          println 'init.gradle: In execution phase - doFirst'
          println "Value of myVar=${myVar}"
        }
        doLast {
          println 'init.gradle: In execution phase - doLast'
        }
      }
    }
    

    build.gradle
    apply plugin: 'java'
    
    // set the value
    CommonTasks.myVar = 'buildValue'
    
    clean.dependsOn CommonTasks
    

    这应该在执行时打印出myVar=buildValue

    关于gradle - 在init.gradle任务中访问项目构建变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38671420/

    相关文章:

    gradle - 如何在 Gradle 中压缩单个文件?

    android - 我可以在特定设备上运行gradle命令吗?

    gradle - 如何为所有源集在Gradle中创建通用流程资源

    android - "deps"中的 "implementation deps.support.app_compat"是什么?

    gradle - Android Studio向项目添加外部JAR

    gradle - 可以在gradle中使用jar中的资源文件吗?

    java - Gradle:如果我将依赖项从 "implementation"更改为 "runtime"并且项目仍在编译,是否会有问题?

    java - gradle依赖关系和缓存

    Gradle如何更改源代码中的版本号

    spring - 类加载器问题