我想知道是否可以将Gradle配置为对所有项目使用一个全局build
目录?我需要这个,因为我将所有项目存储在Google Drive文件夹中(用于备份和从其他设备快速访问),当我构建项目时,Google Drive正在同步项目build
目录时加载CPU。所以我想将build
目录移到Google云端硬盘之外。
此选项对于那些希望使用RAM磁盘作为build
目录的存储来构建项目的人也很有用。
答案 0 :(得分:46)
感谢Peter Niederwieser。由于其他细节,我决定发表自己的答案。
要设置全局构建目录,您需要将这些行添加到〜/ .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
}
答案 1 :(得分:2)
的build.gradle:
def baseDir = "/global/build/dir/$project.name"
buildDir = baseDir + "/root"
subprojects {
buildDir = baseDir + project.path.replaceFirst(":", "/").replace(":", ".")
}
答案 2 :(得分:0)
你也可以采取相反的方式。将build
文件夹替换为全局文件夹。
build
文件夹mklink /d ...disk\path\to\project\build ...RAM\path\to\project
(或Unix中的ln
)您可以在clean
任务中自动执行此操作,以便gradlew clean
清除文件夹内容并重新创建链接。
通过一些快速测试,似乎Google云端硬盘无法识别Windows上的联结链接中的目录。它会同步文件夹,但不会同步内容。奇怪的是,如果我将文件上传到云端硬盘进入这些文件夹,它们会同步到本地副本中。但是,如果我从磁盘中删除同步文件,则不会同步删除。似乎链接导致Drive成为一种方式。