build - Gradle 全局构建目录

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

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

最佳答案

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

要设置全局构建目录,您需要将这些行添加到~/.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 字节 block 的计数(例如,对于 128MB RAM 磁盘是 262114)

buildDir 行将是:

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

您还可以扩展配置到:

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

~/.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
}

https://stackoverflow.com/questions/23340946/

相关文章:

c# - NuGet 以代码 -1 退出 - 结果构建失败

c# - 改进 CI 构建时间 (.NET)

c# - Visual Studio 开始构建前的漫长等待

gcc - 使用不同的 gcc 版本构建 boost

ruby - 指定一个任务具有多个依赖项

c++ - #error 请为 _AFXDLL 构建使用/MD 开关

python - 使用 Cython 的 setup_requires?

java - 如何升级eclipse内置的ant?

gcc - g++ 输出 : file not recognized: File format no

build - 是否可以将 Jenkins 自由式作业转换为多配置作业?