Gradle全局构建目录

mix*_*xel 23 global build gradle google-drive-api

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

此选项对于那些希望使用RAM磁盘作为build目录存储来构建项目的人也很有用.

mix*_*xel 50

感谢Peter Niederwieser.由于其他细节,我决定发布自己的答案.

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

gradle.projectsLoaded {
    rootProject.allprojects {
        buildDir = "/path/to/build/${rootProject.name}/${project.name}"
    }
}
Run Code Online (Sandbox Code Playgroud)

buildRAM磁盘上拥有全局目录的不错选项.

如果您是macOS(OS X)用户,则可以执行以下操作:

diskutil erasevolume HFS+ 'RAMDiskName' `hdiutil attach -nomount ram://XXXXXX`
Run Code Online (Sandbox Code Playgroud)

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

buildDir行将是:

buildDir = "/Volumes/RAMDiskName/${rootProject.name}/${project.name}"
Run Code Online (Sandbox Code Playgroud)

您还可以将配置扩展到:

  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)
}
Run Code Online (Sandbox Code Playgroud)

在项目settings.gradle中:

gradle.ext.group = 'com.example.yourproject'
Run Code Online (Sandbox Code Playgroud)

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

allprojects {
    ...
    group gradle.ext.group
}
Run Code Online (Sandbox Code Playgroud)


Pet*_*ser 7

构建.gradle:

def baseDir = "/global/build/dir/$project.name"
buildDir = baseDir + "/root"
subprojects {
    buildDir = baseDir + project.path.replaceFirst(":", "/").replace(":", ".")
}
Run Code Online (Sandbox Code Playgroud)