Gradle配置全局变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gradle配置全局变量相关的知识,希望对你有一定的参考价值。

参考技术A 为方便在不同module中设置版本号等配置信息,可以通过配置全局变量来统一所有module的公共配置信息。
设置方法一般分为两种:
一、独立文件配置
1.1.在项目的根目录下新建config.gradle文件

1.2.将gradle中的公共信息写入config.gradle文件中:

1.3.在主项目的build.gradle中申明一下:

1.4.在项目中引用我们的路径配置。如下图:

二、在gradle.properties或者local.properties文件中配置
如下为签名配置:

看了觉得也还挺方便的,但是!
需要注意的是:因为用到的都是String变量,当需要用到Integer变量时,就麻烦点了:

原文: http://blog.csdn.net/fwt336/article/details/54613419

Gradle 全局构建目录

【中文标题】Gradle 全局构建目录【英文标题】:Gradle global build directory 【发布时间】:2014-06-13 23:47:12 【问题描述】:

我想知道是否可以将 Gradle 配置为对所有项目使用一个全局 build 目录?我需要这个,因为我将所有项目都存储在 Google Drive 文件夹中(用于备份和从其他设备快速访问),并且当我构建项目时,Google Drive 正在加载 CPU,同时同步项目 build 目录。所以我想将build 目录移到 Google Drive 之外。

对于那些想要使用 RAM 磁盘作为 build 目录的存储来构建项目的人来说,此选项也很有用。

【问题讨论】:

没有.driveignore 文件吗 ;-) ? @PaulVerest 可能是。但现在我不将项目存储在任何云存储中,并且仅将全局构建目录用于构建过程提升和快速清理。 试试版本控制,比如 Git。 @TWiStErRob 不,我使用的是 SSD,没有进行任何测量。我的主要目标是将所有项目的构建目录移动到一个地方以轻松清理磁盘空间。现在我没有使用 RAM 驱动器,因为它不会显着提升性能,但我的主目录中仍然有全局构建目录。 @mixel 感谢您的详细回复。提示:考虑SSD aging,即使它同样快。 【参考方案1】:

感谢彼得·尼德维泽。由于更多细节,我决定发布自己的答案。

要设置全局构建目录,您需要将这些行添加到~/.gradle/init.gradle

gradle.projectsLoaded 
    rootProject.allprojects 
        buildDir = "/path/to/build/$rootProject.name/$project.name"
    

RAM 磁盘上拥有全局build 目录是不错的选择。

如果您是 macOS (OS X) 用户,您可以这样做:

diskutil erasevolume HFS+ 'RAMDiskName' `hdiutil attach -nomount ram://XXXXXX`

其中XXXXXX 是 512 字节块的计数(例如,对于 128MB RAM 磁盘,它是 262114)

buildDir 行将是:

buildDir = "/Volumes/RAMDiskName/$rootProject.name/$project.name"

您还可以扩展配置到:

    从环境变量中获取全局构建路径或回退到项目目录内的build 目录; 在路径中包含项目组,这使路径更加独特,特别是如果您有多个同名项目。

~/.gradle/init.gradle

def configProject(p, buildDir) 
    p.buildDir = "$buildDir/$p.name"  
    p.subprojects  s ->
        configProject(s, "$p.buildDir")
    


def buildDir = System.env.GRADLE_GLOBAL_BUILD_PATH
if (!buildDir?.trim()) 
    buildDir = "build"


gradle.projectsLoaded 
    if (ext.has("group")) 
        buildDir += "/$ext.group"
    
    configProject(rootProject, buildDir)

在项目settings.gradle中:

gradle.ext.group = 'com.example.yourproject'

您也可以在项目 build.gradle 中使用此设置来设置项目组,但这是可选的:

allprojects 
    ...
    group gradle.ext.group

【讨论】:

【参考方案2】:

build.gradle:

def baseDir = "/global/build/dir/$project.name"
buildDir = baseDir + "/root"
subprojects 
    buildDir = baseDir + project.path.replaceFirst(":", "/").replace(":", ".")

【讨论】:

不错。但是有没有像环境变量这样的设置?所以我可以调整全局 gradle 行为,而不是每个项目。 您的意思不是每个构建,而是所有构建?您可以将代码放入~/.gradle/init.gradle(需要稍作修改)。 感谢您的帮助!我赞成你的回答,但补充说我的问题完全可以接受。 谢谢。这在具有深度嵌套模块目录的项目中效果很好。【参考方案3】:

你也可以走相反的路。将build 文件夹替换为全局文件夹。

    删除项目的build 文件夹 mklink /d ...disk\path\to\project\build ...RAM\path\to\project(或 Unix 中的 ln) 快速构建

您可以在 clean 任务中自动执行此操作,因此 gradlew clean 会清理文件夹内容并重新创建链接。

通过一些快速测试,Google 云端硬盘似乎无法识别 Windows 连接链接中的目录。它会同步文件夹,但不会同步内容。奇怪的是,如果我将文件上传到 Drive 到这些文件夹中,它们会同步到本地副本中。但是,如果我从磁盘中删除同步文件,则删除不会同步回来。似乎链接导致云端硬盘成为一种方式。

【讨论】:

以上是关于Gradle配置全局变量的主要内容,如果未能解决你的问题,请参考以下文章

Gradle的一些技巧和遇到的问题

Kotlin之Databinding的配置和使用

Kotlin之Databinding的配置和使用

less全局变量配置

Rust 全局变量

thinkphp如何在配置文件中定义全局变量