Je souhaite savoir s'il est possible de configurer Gradle pour utiliser un répertoire global build
pour tous les projets. J'ai besoin de cela car je stocke tous mes projets dans le dossier Google Drive (pour la sauvegarde et l'accès rapide depuis d'autres appareils) et lorsque je construis le projet, Google Drive charge le processeur lors de la synchronisation du répertoire du projet build
. Je souhaite donc déplacer les répertoires build
en dehors de Google Drive.
Cette option sera également utile pour ceux qui souhaitent construire des projets en utilisant le disque RAM comme stockage pour le répertoire build
.
Merci à Peter Niederwieser. J'ai décidé de poster ma propre réponse en raison de détails supplémentaires.
Pour configurer le répertoire de construction global vous devez ajouter ces lignes à ~/.gradle/init.gradle :
gradle.projectsLoaded {
rootProject.allprojects {
buildDir = "/path/to/build/${rootProject.name}/${project.name}"
}
}
Belle option pour avoir le répertoire global build
sur le disque RAM .
Si vous êtes un utilisateur macOS (OS X), vous pouvez le faire avec:
diskutil erasevolume HFS+ 'RAMDiskName' `hdiutil attach -nomount ram://XXXXXX`
où XXXXXX
est un nombre de blocs de 512 octets (par exemple, 262114 pour 128 Mo de disque RAM)
Et la ligne buildDir
sera:
buildDir = "/Volumes/RAMDiskName/${rootProject.name}/${project.name}"
Aussi, vous pouvez étendre la configuration à:
build
dans le répertoire du projet;~/.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)
}
Et dans le projet settings.gradle :
gradle.ext.group = 'com.example.yourproject'
Vous pouvez également utiliser ce paramètre dans le projet build.gradle pour définir le groupe de projets, mais cela est facultatif:
allprojects {
...
group gradle.ext.group
}
build.gradle:
def baseDir = "/global/build/dir/$project.name"
buildDir = baseDir + "/root"
subprojects {
buildDir = baseDir + project.path.replaceFirst(":", "/").replace(":", ".")
}
Vous pouvez aussi aller dans le sens opposé. Remplacez le dossier build
par un dossier global.
build
du projetmklink /d ...disk\path\to\project\build ...RAM\path\to\project
(ou ln
sous Unix)Vous pouvez automatiser cela dans la tâche clean
. Un gradlew clean
nettoie le contenu du dossier et recrée le lien.
Après quelques tests rapides, il semble que Google Drive ne reconnaisse pas les répertoires dans les liens de jonction sous Windows. Cela synchronisera les dossiers, mais pas le contenu. Bizarrement, si je télécharge des fichiers sur Drive dans ces dossiers, ils sont synchronisés dans la copie locale. Mais, si je supprime le fichier synchronisé du disque, la suppression n'est pas synchronisée. Il semble que les liens font que Drive soit un moyen.