Nous avons plusieurs versions indépendantes (chaque version indépendante est une version multi-projets). Les scripts de construction principaux deviennent assez volumineux car nous avons un ensemble de tâches communes réutilisées par les sous-projets et il y a beaucoup de répétition entre les générations indépendantes. Ce que nous recherchons, c'est:
Quelle est la meilleure façon d'y parvenir à Gradle?
Gradle 0.9 vous permet d'importer un script de build à partir d'un autre script de build. Jetez un œil à: Configuration du projet à l'aide d'un script de build 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, donc vous pouvez rendre vos scripts partagés disponibles via HTTP quelque part (par exemple votre dépôt Subversion), et les importer à partir de plusieurs builds.
La solution que j'ai trouvée implique de mapper les éléments que vous avez dans votre fichier other.gradle
.
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 fichier build.gradle
:
apply from: 'other.gradle'
// ...
Android {
defaultConfig {
versionName VERConsts['NAME_CALL']()
// or
versionName VERConsts['NAME']
}
}
Ensuite, le versionName
aura le résultat de l'appel.
Notes:
VERConsts['NAME'] = getVersionName()
appellera getVersionName()
et stockera son résultat. L'utiliser dans votre script, par exemple versionName VERConsts['NAME']
Attribuera alors la valeur stockée.VERConsts['NAME_CALL']
Stockera à la place une référence à la fonction. L'utilisation de VERConsts['NAME_CALL']()
dans votre script va en fait appeler la fonction et affecter le résultat à votre variableLa première entraînera l'affectation de la même valeur dans le script tandis que la seconde peut entraîner des valeurs différentes (par exemple, si quelqu'un pousse une autre version pendant l'exécution de votre script).