Gradle tarefa no final de construção com uma multiprojeto construir
-
21-12-2019 - |
Pergunta
Eu estou tentando criar a minha própria tarefa, que vai criar um pacote de todos os artefatos gerados durante a minha multi-compilação do projeto.
Atualmente, o que eu faço direito, agora é só:
gradle build createPackage
O que dá saída semelhante ao seguinte:
:test-utility:compileJava UP-TO-DATE
:test-utility:processResources UP-TO-DATE
...
:test-utility:check UP-TO-DATE
:test-utility:build UP-TO-DATE
Creating Package...
Created.
BUILD SUCCESSFUL
Total time: 4.654 secs
Com o createPackage
tarefa:
task createPackage {
println "Creating Package..."
println "Created."
}
No entanto, eu gostaria de simplesmente executando apenas um comando, então, qual seria a melhor maneira de fazer isso e garantir que a encomenda fica mantida?
Idealmente, eu gostaria de chamar build
dentro do createPackage
tarefa ou acrescentar a build
tarefa com a minha tarefa.
Solução
Ok ler entre as linhas, há algumas coisas para limpar
1) o Seu printlns estão sendo executados na fase de configuração, não a fase de execução.Ver http://www.gradle.org/docs/current/userguide/build_lifecycle.html para obter mais informações.
2) Você não tem um único 'construir' tarefa. gradle build
na linha de comando irá executar o 'construir' tarefa de cada um de seus subprojetos.Seu pacote tarefa precisaria depender de todos eles.Algo como ...
apply plugin: 'java'
evaluationDependsOnChildren()
task createPackage(type:Zip) {
dependsOn subprojects*.build
}
3) Você pode ser mais declarativa com gradle - apenas diga a ele o que você deseja compactar e ele irá descobrir o que ele precisa para ser executado.Por exemplo, você pode dizer que você quer zip de todos os frascos de seus subprojetos.
apply plugin: 'java'
evaluationDependsOnChildren()
task createPackage(type:Zip) {
from subprojects*.jar
}
Outras dicas
Há uma abundância de formas.Uma sugestão é modificar build
a depender createPackage
para certificar-se de que você pode chamar apenas de gradle build
.Em seguida, pretende reforçar a sua tarefa e dizer quais são suas entradas (provavelmente, essas são as saídas de algumas outras tarefas, como jar
).Gradle irá adicionar estas tarefas para execução quando você executar o build e pode re-executar-los com base no up-to-date status de cada tarefa.Isto está documentado no manual - http://www.gradle.org/docs/current/userguide/more_about_tasks.html#sec:up_to_date_checks e mais tarde, em um capítulo sobre tarefas personalizadas.