Existe-t-il un moyen de diviser / facturer des parties communes de Gradle Build
-
24-09-2019 - |
Question
Nous avons plusieurs constructions indépendantes (chaque version indépendante est une version multi-projets). Les principaux scripts de construction deviennent assez grands car nous avons un ensemble de tâches communes réutilisées par des sous-projets ainsi que beaucoup de répétitions entre les constructions indépendantes. Ce que nous recherchons, c'est:
- Un moyen de diviser le fichier de construction principale en fichiers plus petits
- Un moyen de réutiliser certaines parties de la construction dans d'autres versions indépendantes
Quelle est la meilleure façon d'y parvenir à Gradle?
La solution
Gradle 0.9 vous permet d'importer un script de construction à partir d'un autre script de construction. Jettes un coup d'oeil à: Configuration du projet à l'aide d'un script de construction externe. Fondamentalement, c'est apply from: 'other.gradle'
.
Une chose que le guide de l'utilisateur ne mentionne pas est que le paramètre 'From' peut être une URL, vous pouvez donc rendre vos scripts partagés disponibles via HTTP quelque part (par exemple, votre référentiel Subversion) et les importer à partir de plusieurs builds.
Autres conseils
La solution que j'ai trouvée implique de cartographier les choses que vous avez dans votre other.gradle
dossier.
def getVersionName = { ->
def stdout = new ByteArrayOutputStream()
exec {
commandLine 'git', 'describe', '--tags'
standardOutput = stdout
}
return stdout.toString().trim()
}
ext{
VERConsts = [:]
VERConsts['NAME'] = getVersionName()
VERConsts['NAME_CALL'] = getVersionName
}
Ensuite, dans votre build.gradle
dossier:
apply from: 'other.gradle'
// ...
android {
defaultConfig {
versionName VERConsts['NAME_CALL']()
// or
versionName VERConsts['NAME']
}
}
Puis le versionName
aura le résultat de l'appel.
Remarques:
VERConsts['NAME'] = getVersionName()
appelleragetVersionName()
et stocker son résultat. L'utiliser dans votre script, par exempleversionName VERConsts['NAME']
Attribuera ensuite la valeur stockée.VERConsts['NAME_CALL']
Conservera plutôt une référence à la fonction. UtilisantVERConsts['NAME_CALL']()
dans votre script appellera réellement la fonction et attribuera le résultat à votre variable
Le premier entraînera la même valeur attribuée à travers le script tandis que le second peut entraîner différentes valeurs (par exemple, si quelqu'un pousse une autre version pendant l'exécution de votre script).