Eu tenho um script gradle complexo que envolve uma carga de funcionalidade em torno da construção e implantação de uma série de projetos netbeans em vários ambientes.
O script funciona muito bem, mas basicamente é configurado por meio de meia dúzia de mapas contendo informações de projeto e ambiente.
Quero abstrair as tarefas em outro arquivo, para que possa simplesmente definir meus mapas em um arquivo de construção simples e importar as tarefas de outro arquivo. Dessa forma, posso usar as mesmas tarefas principais para vários projetos e configurar esses projetos com um simples conjunto de mapas.
Alguém pode me dizer como posso importar um arquivo gradle para outro, de maneira semelhante à tarefa do Ant? Pesquisei os documentos de Gradle sem sucesso até agora.
Informação adicional
Após a resposta de Tom abaixo, pensei em tentar esclarecer exatamente o que quero dizer.
Basicamente, tenho um script gradle que executa uma série de subprojetos. No entanto, os subprojetos são todos projetos Netbeans e vêm com seus próprios scripts de construção de formigas, então tenho tarefas no gradle para chamar cada um deles.
Meu problema é que tenho algumas configurações no topo do arquivo, como:
projects = [
[name:"MySubproject1", shortname: "sub1", env:"mainEnv", cvs_module="mod1"],
[name:"MySubproject2", shortname: "sub2", env:"altEnv", cvs_module="mod2"]
]
Em seguida, gero tarefas como:
projects.each({
task "checkout_$it.shortname" << {
// Code to for example check module out from cvs using config from 'it'.
}
})
Eu tenho muitos desses trechos de geração de tarefas, e todos eles são genéricos - eles dependem inteiramente da configuração na lista de projetos.
Então, o que eu quero é uma maneira de colocar isso em um script separado e importá-lo da seguinte maneira:
projects = [
[name:"MySubproject1", shortname: "sub1", env:"mainEnv", cvs_module="mod1"],
[name:"MySubproject2", shortname: "sub2", env:"altEnv", cvs_module="mod2"]
]
import("tasks.gradle") // This will import and run the script so that all tasks are generated for the projects given above.
Portanto, neste exemplo, tasks.gradle terá todo o código de geração de tarefa genérica e será executado para os projetos definidos no arquivo build.gradle principal. Desta forma, tasks.gradle é um arquivo que pode ser usado por todos os grandes projetos que consistem em uma série de subprojetos com arquivos de construção do Netbeans.
apply from
executa imediatamente as tarefas externas. Isso pode não ser preferível na lógica de execução (ou seja, eu gostaria de executar as tarefas quando eu quiser, não imediatamente).apply from
executa imediatamente as tarefas externas. Não se deixe enganar. Tarefas externas são configuradas, não executadas.Respostas:
Há um novo recurso no 0.9. Você pode usar o
apply from: 'other.gradle'
comando.Leia minha pergunta sobre a mesma coisa em: Há uma maneira de dividir / fatorar partes comuns da construção do Gradle
fonte
A resposta à pergunta acabou estando no sistema de Plugins, onde você pode adicionar a funcionalidade desejada em um conjunto de plugins que podem ser arquivos bacanas localizados no diretório
buildSrc/src/main/groovy
. Plugins também podem ser empacotados como Jar, embora eu não tenha tentado isso.Detalhes aqui: Plug-ins personalizados
fonte
Bem, é difícil dizer o que é melhor para você sem realmente ver seu arquivo de construção.
Eu poderia supor que configurar seu ambiente como uma construção de vários projetos deve fornecer a abstração que você está procurando.
Na raiz do projeto,
build.gradle
você define todas as coisas específicas do seu domínio, bem como as coisas que se aplicam a todos os seus subprojetos:O diretório raiz do projeto também pode conter um
gradle.properties
arquivo onde você define as propriedades usadas por seus projetos:Em seguida, em um arquivo adicional da raiz de seu projeto denominado,
settings.gradle
você realmente aponta para seus subprojetos:Cada diretório de subprojeto contém um
build.gradle
arquivo contendo apenas o material específico do subprojeto.Não importa se você invoca a
gradle
partir da raiz do projeto ou do diretório de subprojeto, o gradle considerará automaticamente todas as suas definições feitas nos vários arquivos.Observe também que nenhuma tarefa de compilação será executada para a raiz do seu projeto, desde que você não carregue nenhum plug-in além do plug-in padrão no nível da raiz.
fonte