Pergunta

Temos várias compilações independentes (cada compilação independente é uma compilação com vários projetos). Os principais scripts de construção se tornam bastante grandes, pois temos um conjunto de tarefas comuns reutilizadas por subprojetos, bem como há muita repetição entre construções independentes. O que estamos procurando é:

  1. Uma maneira de dividir o arquivo de construção principal em arquivos menores
  2. Uma maneira de reutilizar algumas partes da construção em outras construções independentes

Qual é a melhor maneira de conseguir isso em Gradle?

Foi útil?

Solução

O Gradle 0.9 permite importar um script de construção de outro script de construção. Dê uma olhada em: Configurando o projeto usando um script de construção externo. Basicamente, é apply from: 'other.gradle'.

Uma coisa que o guia do usuário não menciona é que o parâmetro 'do' pode ser um URL, para que você possa disponibilizar seus scripts compartilhados via HTTP em algum lugar (por exemplo, seu repositório de subversão) e importá -los de várias compilações.

Outras dicas

A solução que encontrei implica mapear as coisas que você tem em seu other.gradle Arquivo.

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
}

Então, em seu build.gradle Arquivo:

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

Então o versionName terá o resultado da chamada.

Notas:

  • VERConsts['NAME'] = getVersionName() chamará getVersionName() e armazene seu resultado. Usando -o em seu script, por exemplo versionName VERConsts['NAME'] então atribuirá o valor armazenado.
  • VERConsts['NAME_CALL'] Em vez disso, armazenará uma referência à função. Usando VERConsts['NAME_CALL']() Em seu script, realmente chamará a função e atribuirá o resultado à sua variável

O primeiro resultará no mesmo valor atribuído ao longo do script, enquanto o último pode resultar em valores diferentes (por exemplo, se alguém empurrar outra versão enquanto seu script estiver em execução).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top