Gradle Global build directory
Chcę wiedzieć, czy możliwe jest skonfigurowanie Gradle tak, aby używał jednego globalnego katalogu build
dla wszystkich projektów? Potrzebuję tego, ponieważ przechowuję wszystkie moje projekty w folderze dysku Google (do tworzenia kopii zapasowych i szybkiego dostępu z innych urządzeń) i kiedy buduję projekt Dysk Google ładuje procesor podczas synchronizacji katalogu project build
. Chcę więc przenieść build
katalogi poza Dysk Google.
Również ta opcja będzie przydatna dla tych, którzy chcą budować projekty z użyciem pamięci RAM jako magazynu dla build
katalog.
3 answers
Dzięki Peter Niederwieser. Postanowiłem opublikować własną odpowiedź ze względu na dodatkowe szczegóły.
Aby skonfigurować globalny katalog budowania musisz dodać te linie do ~/.gradle/init.gradle :
gradle.projectsLoaded {
rootProject.allprojects {
buildDir = "/path/to/build/${rootProject.name}/${project.name}"
}
}
Fajna opcja aby mieć globalny katalog build
na dysku RAM.
Jeśli jesteś użytkownikiem macOS (OS X) możesz to zrobić za pomocą:
diskutil erasevolume HFS+ 'RAMDiskName' `hdiutil attach -nomount ram://XXXXXX`
Gdzie XXXXXX
jest liczbą 512-bajtowych bloków (na przykład, jest to 262114 dla 128MB RAM dysk)
I buildDir
linia będzie:
buildDir = "/Volumes/RAMDiskName/${rootProject.name}/${project.name}"
Możesz również rozszerzyć konfigurację do:
- get global build path from environment variable or fallback to
build
directory inside project directory; - Dołącz grupę projektów w path, to sprawia, że ścieżka jest bardziej unikalna, zwłaszcza jeśli masz kilka projektów o tej samej nazwie.
~/.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)
}
I w projekcie ustawienia.gradle :
gradle.ext.group = 'com.example.yourproject'
Możesz również użyć tego ustawienia w projekcie build.gradle aby ustawić grupę projektu, ale jest to opcjonalne:
allprojects {
...
group gradle.ext.group
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-11 13:27:41
Zbuduj."gradle": {]}
def baseDir = "/global/build/dir/$project.name"
buildDir = baseDir + "/root"
subprojects {
buildDir = baseDir + project.path.replaceFirst(":", "/").replace(":", ".")
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-28 15:45:52
Możesz też pójść w odwrotną stronę. Zastąp folder build
folderem globalnym.
- Usuń folder projektu
build
-
mklink /d ...disk\path\to\project\build ...RAM\path\to\project
(lubln
w Unixie) - Build fast
Można to zautomatyzować w zadaniu clean
, więc gradlew clean
czyści zawartość folderu i odtwarza łącze.
Po kilku szybkich testach wydaje się, że Dysk Google nie rozpoznaje katalogu w łączach w systemie Windows. Zsynchronizuje foldery, ale nie zawartość. Dziwne, że prześlij pliki na dysk do tych folderów, zostaną zsynchronizowane z lokalną kopią. Ale jeśli usunę zsynchronizowany Plik z dysku, usunięcie nie zostanie zsynchronizowane z powrotem. Wygląda na to, że linki powodują, że napęd jest jednokierunkowy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-06 17:44:26