Existe-t-il un moyen de diviser / facturer des parties communes de Gradle Build

StackOverflow https://stackoverflow.com/questions/2566685

  •  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:

  1. Un moyen de diviser le fichier de construction principale en fichiers plus petits
  2. 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?

Était-ce utile?

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() appellera getVersionName() et stocker son résultat. L'utiliser dans votre script, par exemple versionName VERConsts['NAME'] Attribuera ensuite la valeur stockée.
  • VERConsts['NAME_CALL'] Conservera plutôt une référence à la fonction. Utilisant VERConsts['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).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top