Gradle глобальный каталог сборки
Я хочу знать, возможно ли настроить Gradle для использования одного глобального build
каталог для всех проектов? Мне это нужно, потому что я храню все свои проекты в папке Google Drive (для резервного копирования и быстрого доступа с других устройств), а при сборке проекта Google Drive загружает ЦП при синхронизации проекта build
каталог. Итак, я хочу переехать build
каталоги вне Google Диска.
Также эта опция будет полезна тем, кто хочет строить проекты, используя RAM-диск в качестве хранилища для build
каталог.
3 ответа
Спасибо Питеру Нидервизеру. Я решил опубликовать свой собственный ответ из-за дополнительных деталей.
Чтобы настроить глобальный каталог сборки, вам нужно добавить эти строки в ~ /.gradle / init.gradle:
gradle.projectsLoaded {
rootProject.allprojects {
buildDir = "/path/to/build/${rootProject.name}/${project.name}"
}
}
Хороший вариант иметь глобальный build
каталог на диске RAM.
Если вы пользователь MacOS (OS X), вы можете сделать это с:
diskutil erasevolume HFS+ 'RAMDiskName' `hdiutil attach -nomount ram://XXXXXX`
где XXXXXX
это количество блоков в 512 байт (например, это 262114 для 128 МБ ОЗУ)
А также 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)
}
И в настройках проекта. Gradle:
gradle.ext.group = 'com.example.yourproject'
Также вы можете использовать этот параметр в проекте build.gradle, чтобы установить группу проекта, но это необязательно:
allprojects {
...
group gradle.ext.group
}
build.gradle:
def baseDir = "/global/build/dir/$project.name"
buildDir = baseDir + "/root"
subprojects {
buildDir = baseDir + project.path.replaceFirst(":", "/").replace(":", ".")
}
Вы также можете пойти противоположным путем. Заменить build
папка с глобальной папкой.
- Удалить проект
build
папка mklink /d ...disk\path\to\project\build ...RAM\path\to\project
(или жеln
в Unix)- Быстро построить
Вы можете автоматизировать это в clean
задача, так что gradlew clean
очищает содержимое папки и воссоздает ссылку.
После некоторого быстрого тестирования кажется, что Google Drive не распознает каталог в ссылочных ссылках в Windows. Он будет синхронизировать папки, но не содержимое. Странно, если я загружаю файлы на диск в эти папки, они синхронизируются в локальной копии. Но если я удаляю синхронизированный файл с диска, удаление не синхронизируется обратно. Похоже, ссылки приводят Drive в одну сторону.