Domanda

Abbiamo diverse build indipendenti (ogni build indipendente è una build multi-progetto). Le principali script di build diventano abbastanza grandi in quanto abbiamo una serie di compiti comuni riutilizzati dai sottoproietti e c'è molta ripetizione tra build indepedicenti. Quello che stiamo cercando è:

  1. Un modo per dividere il file di build principale in file più piccoli
  2. Un modo per riutilizzare alcune parti della build in altre build indipendenti

Qual è il modo migliore per raggiungerlo a Gradle?

È stato utile?

Soluzione

Gradle 0.9 consente di importare uno script di build da un altro script di build. Dai un'occhiata a: Configurazione del progetto utilizzando uno script di build esterno. Fondamentalmente lo è apply from: 'other.gradle'.

Una cosa che la Guida dell'utente non menziona è che il parametro "da" può essere un URL, quindi puoi rendere disponibili i tuoi script condivisi tramite HTTP da qualche parte (ad esempio il repository di sovversione) e importarli da più build.

Altri suggerimenti

La soluzione che ho trovato implica mappare le cose che hai nel tuo other.gradle file.

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
}

Quindi, nel tuo build.gradle file:

apply from: 'other.gradle'
// ...
android {
    defaultConfig {
        versionName VERConsts['NAME_CALL']()
        // or
        versionName VERConsts['NAME']
    }
}

Poi il versionName avrà il risultato della chiamata.

Appunti:

  • VERConsts['NAME'] = getVersionName() chiamerà getVersionName() e memorizzare il suo risultato. Usandolo nel tuo script, ad esempio versionName VERConsts['NAME'] Assegnerà quindi il valore memorizzato.
  • VERConsts['NAME_CALL'] memorizzerà invece un riferimento alla funzione. Usando VERConsts['NAME_CALL']() Nel tuo script chiamerà effettivamente la funzione e assegnerà il risultato alla tua variabile

Il primo comporterà lo stesso valore assegnato attraverso lo script mentre il secondo può comportare valori diversi (ad esempio se qualcuno spinge un'altra versione mentre lo script è in esecuzione).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top