获取Gradle'rootProject'对象以尊重env vars

时间:2014-09-25 01:25:00

标签: gradle environment-variables

我在Gradle项目的构建文件(build.gradle)中运行了以下配置:

codenarcMain {
    configFile = rootProject.file("gradle/codenarc/CodeNarcMain.groovy")
}

当我Google“ Gradle rootProject ”时,我找到了this link,这使rootProject看起来像ProjectDescriptor个实例。

但是看ProjectDescriptor,我没有看到任何名为file的属性。我看到buildFileprojectDir,但没有file属性。

最终,我试图让Gradle从外部构建目录加载CodeNarc配置文件。在我的系统上,我有一个名为$CODENARC_HOME的env var,其目录结构如下:

CODENARC_HOME/ (say this is /home/myuser/tools/codenarc/)
    CodeNarcMain.groovy
    CodeNarcTest.groovy
    README.md

现在我想在Gradle中更改CodeNarc配置,看起来像这样:

codenarcMain {
    configFile = rootProject.file("CODENARC_HOME/CodeNarcMain.groovy")
}

然后,无论在哪里定义CODENARC_HOME,Gradle构建仍然可以找到配置文件。

所以我的问题:

  1. file上的rootProject属性是什么,我为什么不在API文档(上面链接)中看到它?和
  2. 如何让rootProject.file(...)在其文件路径字符串参数中使用system / env vars?

1 个答案:

答案 0 :(得分:1)

rootProject中的

settings.gradle是一个ProjectDescriptorrootProject中的build.gradleProject。可以使用标准Java方式访问环境变量和系统属性:

codenarcMain {
    configFile = rootProject.file("${System.getenv("CODENARC_HOME")}/CodeNarcMain.groovy")
    // or: System.getProperty("codenarc.home")
}