Você está na página 1de 13

28/8/2014

Captulo 2 Tarefas gradle

Anterior

ndice

Prxima

Captulo 2 Tarefas gradle


Dentro de um arquivo Gradle construir, a unidade fundamental da atividade de construo a tarefa. Tarefas so nomeados
colees de instrues de compilao que Gradle executa como ele executa uma compilao. Voc j viu exemplos de tarefas no
Captulo 1, Ol, Gradle! , e eles podem parecer uma abstrao familiares em comparao com outros sistemas de construo,
mas Gradle fornece um modelo mais rico do que voc pode estar acostumado. Ao invs de declaraes bsicas da atividade de
construo amarrados com dependncias, tarefas gradle so objetos de primeira classe disponveis para voc programar se voc
desejar.
Vamos dar uma olhada nas diferentes formas de definir uma tarefa, os dois aspectos-chave de definies de tarefas, ea API
tarefa que poder utilizar para realizar a nossa prpria personalizao.

2.1. Declarando uma Task


Na introduo , vimos como criar uma tarefa e atribuir-lhe o comportamento, tudo ao mesmo tempo. No entanto, h uma
maneira ainda mais simples para criar uma tarefa. Tudo que voc precisa de um nome de tarefa ( Exemplo 2.1, "Declarando
uma tarefa apenas pelo nome" ).
Exemplo 2.1. Declarando uma tarefa apenas pelo nome
Ol tarefa

Voc pode ver os resultados deste executando tarefas gradle( Exemplo 2.2, "o relatrio do Gradle da tarefa recm-criada" ).
Exemplo 2.2. O relatrio do Gradle da tarefa recm-criada
-------------------------------------------------- ---------Projeto Raiz
-------------------------------------------------- ---------Tarefas Ajuda
---------dependncias - Mostra as dependncias do projeto raiz 'task-laboratrio'.
help - Exibe uma mensagem de ajuda
projetos - Exibe os subprojetos do projeto raiz 'task-laboratrio'.
Propriedades - Exibe as propriedades do projeto raiz 'task-laboratrio'.
tarefas - Exibe as tarefas no projeto raiz 'task-laboratrio'.
Outras tarefas
----------Ol

2.2. Tarefa Ao
No entanto, a execuo desta tarefa com Ol gradleno ir produzir qualquer resultado, porque ns ainda no atribuda a
tarefa de uma ao. Anteriormente, ns atribumos uma ao para uma tarefa com o operador shift esquerda ( Exemplo 2.3, "Dar
uma tarefa uma ao trivial para executar" ).
Exemplo 2.3. Dando uma tarefa uma ao trivial para realizar
tarefa Ol << {
println "Ol, mundo"
}

Em Groovy, operadoras como <<(o operador "left-shift" de Java) podem ser sobrecarregados para ter significados diferentes
dependendo dos tipos dos objetos com que operam. Neste caso, Gradle sobrecarregou <<para acrescentar um bloco de
cdigo para a lista de aes a tarefa executa. Isto equivalente ao mtodo doLast () falaremos mais adiante neste captulo.
No entanto, agora temos a flexibilidade de acumular cdigo de ao na tarefa referindo-se ao objeto de tarefa que ns criamos (
Exemplo 2.4, "Adio de aes de uma tarefa de cada vez" ).
Exemplo 2.4. Acrescentando suas aes de uma tarefa de cada vez
Ol tarefa
Ol << {
imprimir "Ol"
}

http://www.gradleware.com/registered/books/building-and-testing/tasks.html

1/13

28/8/2014

Captulo 2 Tarefas gradle


Ol << {
println 'mundo'
}

Agora podemos recuperar a nossa sada da compilao familiares ( Exemplo 2.5, "A sada da compilao com aes anexado um
pedao de cada vez" ).
Exemplo 2.5. A sada da compilao com aes anexado um pedao de cada vez
Ol $ gradle
Ol, mundo
$

Esta mais uma vez o comportamento de construo trivial, mas expe um poderoso insight: tarefas no so declaraes
pontuais de actividade de construo, mas so objetos de primeira classe em um ambiente de programao Gradle. E se
pudermos acumular construir aes para eles ao longo do arquivo de construo, h provavelmente mais que possamos fazer.
Vamos continuar a explorar.

2.3. Tarefa de Configurao


Novos usurios do Gradle comumente tropear na sintaxe de configurao ao tentar definir aes de tarefa. Continuando com
nosso exemplo anterior, podemos expandi-la para incluir um bloco de configurao ( Exemplo 2.6, "Uma mistura de configurao
de tarefas e definio de ao tarefa" ).
Exemplo 2.6. Uma mistura de configurao de tarefas e definio de ao tarefa
tarefa initializeDatabase
initializeDatabase << {println "conectar ao banco de dados ' }
initializeDatabase << {println "esquema de banco de dados update ' }
initializeDatabase {println "configurao da conexo do banco de dados ' }

A execuo desse arquivo de construo, ns temos o que pode parecer ser um resultado contra-intuitivo ( Exemplo 2.7, "A sada
do arquivo de construo anterior" ).
Exemplo 2.7. A sada do arquivo de construo anterior
$ Gradle -b scratch.gradle initializeDatabase
configurao da conexo do banco de dados
: InitializeDatabase
conectar ao banco de dados
atualizao do esquema de banco de dados
$

Groovy utiliza o termo "fechamento" para se referir a um bloco de cdigo entre duas chaves. Uma funes de encerramento
como um objeto que pode ser passado como um parmetro para um mtodo ou atribudo a uma varivel, ento executado
mais tarde. Voc ver fechamentos todo em Gradle, pois eles so um ajuste perfeito para a realizao de blocos de cdigo
de configurao e construir aes.
Se o terceiro fechamento tinha sido apenas mais um trecho da ao de compilao, ento ns esperaramos a sua mensagem
para imprimir ltima, no pela primeira vez. Acontece que o encerramento adicionado ao nome da tarefa sem o operador de
deslocamento esquerdo no cria cdigo de ao tarefa adicional em tudo. Em vez disso, uma configurao de bloco. O bloco de
configurao de uma tarefa executada durante o Gradle configurao fase do ciclo de vida, que executado antes da

execuo de fase, quando as aes de tarefas so executadas.


Toda vez Gradle executa uma compilao, ele executado atravs de trs ciclos de vida fases: inicializao, configurao e
execuo. A execuo a fase em que construir tarefas so executadas na ordem estabelecida por suas relaes de
dependncia. A configurao a fase em que os objetos de tarefa so montados em um modelo de objeto interno,
geralmente chamado de DAG (para grafo acclico direcionado ). A inicializao a fase em que Gradle decide quais projetos
esto a participar na compilao. A ltima fase importante na multiproject constri .
Encerramentos de configurao so aditivos como fechamentos de ao, para que pudssemos ter escrito o arquivo de
construo anterior como assim, e veramos a mesma sada ( Exemplo 2.8, "Acrescentando blocos de configurao" ).
Exemplo 2.8. Acrescentando blocos de configurao
tarefa initializeDatabase
initializeDatabase << {println "conectar ao banco de dados ' }
initializeDatabase << {println "esquema de banco de dados update ' }
initializeDatabase {print 'configurar' }
initializeDatabase {println 'conexo com o banco' }

http://www.gradleware.com/registered/books/building-and-testing/tasks.html

2/13

28/8/2014

Captulo 2 Tarefas gradle

O bloco de configurao o lugar para configurar as variveis


e estruturas de dados que sero necessrios pela ao tarefa
quando (e se) ele executado mais tarde na compilao. A estrutura de configurao d-lhe a oportunidade de transformar as
tarefas de sua construo em um modelo de objeto rico preenchido com informaes sobre a construo, em vez de um mero
conjunto de aes de construo a ser executada em uma sequncia. Sem essa distino entre configurao e ao, voc tem
que construir uma complexidade adicional em suas relaes de dependncia de tarefas, resultando em uma construo mais
frgil e um tanto menos expressivos meios de comunicao de estruturas de dados essenciais da construo.
Todo o cdigo de configurao de compilao executado a cada vez que voc executar um Gradle construir arquivo,
independentemente de qualquer tarefa executada durante a execuo.

2.4. Tarefas so objetos


Pode ter ocorrido a voc agora que Gradle est criando um modelo de sua construo objeto interno antes de execut-lo. Isto ,
de fato, de forma explcita o que Gradle est fazendo. Cada tarefa que voc declarar na verdade um objeto de tarefa contida
dentro do projeto global. Um objeto de tarefa tem propriedades e mtodos como qualquer outro objeto. Podemos at mesmo
controlar o tipo de cada objeto de tarefa, e acessar a funcionalidade nica, especfica do tipo de acordo. Alguns exemplos
ajudaro a tornar isso claro.
Por padro, cada nova tarefa recebe o tipo de DefaultTask. Como Java.lang.Objectem cdigo Java, cada tarefa Gradle desce
desse objeto tarefas do tipo, mesmo que estendem a DefaultTasktipo com um tipo prprio. DefaultTasks realmente no fazer
nada parecido com cdigo de compilao ou copiar arquivos, mas eles contm a funcionalidade necessria para que possam
interagir com o modelo do projeto Gradle. Vamos dar uma olhada nos mtodos e propriedades cada tarefa Gradle tem.

2.4.1. Mtodos de DefaultTask


2.4.1.1. dependson (tarefa)
Adiciona uma tarefa como uma dependncia da tarefa chamada. A tarefa dependia-on ser sempre executada antes da tarefa
que depende dele. Existem vrias maneiras para chamar esse mtodo. Se a tarefa mundodepende tarefa Ol, ns poderamos
usar o cdigo mostrado na Exemplo 2.9, "Diferentes formas de chamar o mtodo dependson" .
Exemplo 2.9. Diferentes maneiras de chamar o mtodo dependson
// Declara que o mundo depende Ol
// Preserva as dependncias previamente definidos, bem
tarefa loadTestData {
dependson createSchema
}
// Uma maneira alternativa de expressar a mesma dependncia
tarefa loadTestData {
dependson << createSchema
}
// Fazer o mesmo usando aspas simples (que so geralmente opcional)
tarefa loadTestData {
dependson 'createSchema'
}
// Explicitamente chamar o mtodo no objeto tarefa
tarefa loadTestData
loadTestData.dependsOn createSchema
// Um atalho para declarar dependncias
tarefa loadTestData (dependson: createSchema)

Uma tarefa pode depender mais do que uma tarefa. Se a tarefa loadTestDatadepende tarefas createSchemae
compileTestClasses, poderamos usar o cdigo mostrado na Exemplo 2.10, "Diferentes formas de chamar o mtodo dependson
para mltiplas dependncias" .
Exemplo 2.10. Diferentes maneiras de chamar o mtodo dependson para vrias dependncias
// Declara dependncias um de cada vez
tarefa loadTestData {
dependson << compileTestClasses
dependson << createSchema
}
// dependncias passar como uma lista de comprimento varivel
mundo tarefa {
dependson compileTestClasses, createSchema
}
// Explicitamente chamar o mtodo no objeto tarefa
mundo tarefa
world.dependsOn compileTestClasses, createSchema
// um atalho para as dependncias apenas
// Note a sintaxe lista Groovy
mundo tarefa (dependson: [compileTestClasses, createSchema])

http://www.gradleware.com/registered/books/building-and-testing/tasks.html

3/13

28/8/2014

Captulo 2 Tarefas gradle

2.4.1.2. doFirst (fechamento)


Adiciona um bloco de cdigo executvel para o incio da ao de uma tarefa. Durante a fase de execuo, o bloco de cada tarefa
relevante ao executada. O doFirstmtodo permite que voc adicione um pouco de comportamento para o incio de uma
ao existente, mesmo que a ao definida por um arquivo de construo ou de um plug-in que voc no controla. Chamando
doFirstvrias vezes mantm acrescentando novos blocos de cdigo de ao para o incio da seqncia de execuo da tarefa.
Voc pode invocar o doFirstmtodo diretamente no objeto de tarefa, passando um fechamento para o mtodo. O
encerramento contm o cdigo para ser executado antes da ao existente da tarefa.
Como j mencionado, o encerramento um bloco de cdigo Groovy dentro de um par de chaves. Voc pode passar um
fechamento em torno apenas como qualquer outro objeto. Passando fechamentos de mtodos uma linguagem Groovy
comum.
Exemplo 2.11. Chamar o mtodo doFirst sobre o objeto tarefa
tarefa setupDatabaseTests << {
// Este existente ao da tarefa
println 'dados de teste de carga'
}
setupDatabaseTests.doFirst {
println "criar esquema '
}

Exemplo 2.12. Os resultados do arquivo de construo precedente


$ Gradle setupDatabaseTests
: setupDatabaseTests
criar esquema
dados de teste de carga
$

Voc tambm pode chamar doFirstde dentro de bloco de configurao da tarefa. Lembre-se que o bloco de configurao um
pedao de cdigo executvel que executado antes da ao de qualquer tarefa executada, durante a fase de configurao da
compilao. Em nossa discusso anterior sobre a configurao da tarefa, voc pode ter sido perguntando como voc pode
praticamente usar o bloco de configurao. Este exemplo mostra como voc pode chamar mtodos de tarefas de dentro do bloco
de configurao, o que torna um formato potencialmente muito expressivo para modificar o comportamento da tarefa ( Exemplo
2.13, "Chamar o mtodo doFirst dentro do bloco de configurao da tarefa" ).
Exemplo 2.13. Chamar o mtodo doFirst dentro do bloco de configurao da tarefa
tarefa setupDatabaseTests << {
println "carregamento de dados de teste '
}
setupDatabaseTests {
doFirst {
println "criar esquema '
}
}

Repetidas ligaes para o doFirstmtodo so aditivos. Cdigo de ao de cada chamada anterior mantido, eo novo
fechamento anexado ao incio da lista a serem executados em ordem. Se tivssemos que criar um banco de dados para testes
de integrao (e queria fazer-lhe uma pea de cada vez), podemos usar o cdigo mostrado na Exemplo 2.14, "Repetidas ligaes
para doFirst so cumulativos" .
Exemplo 2.14. Repetidas ligaes para doFirst so cumulativos
tarefa setupDatabaseTests << {
println "carregamento de dados de teste '
}
setupDatabaseTests.doFirst {
println "criar esquema de banco de dados '
}
setupDatabaseTests.doFirst {
println 'drop esquema de banco'
}

Exemplo 2.15. A sada do exemplo precedente


$ Mundo gradle
: setupDatabaseTests

http://www.gradleware.com/registered/books/building-and-testing/tasks.html

4/13

28/8/2014

Captulo 2 Tarefas gradle


cair esquema de banco de dados
criar banco de dados esquema
dados de teste de carga
$

Claro, um pouco artificial para quebrar uma seqncia de inicializao em trs fechamentos distintos e chamadas para
doFirst (), como fizemos aqui. No entanto, por vezes, a definio inicial de uma tarefa no imediatamente disponvel para
alterar como quiser, por exemplo, nos casos em que a tarefa definida em outro arquivo de construo que impossvel ou
impraticvel para voc modificar. Este tipo de modificao programtica de que a lgica de construo de outra forma
inacessveis pode ser muito poderosa.
At agora, os exemplos usaram uma sintaxe muito simples, o que faz com que o mecanismo de Gradle mais bvio, embora
custa de uma grande quantidade de repetio. Em uma construo do mundo real (ainda contando com printlndeclaraes no
lugar de aes de teste reais), que seria mais provvel para estruturar a tarefa como concluda no Exemplo 2.16, "chamadas
para doFirst repetida, reformulado" .
Exemplo 2.16. Repetidas ligaes para doFirst, refatorado
// Definio tarefa inicial (talvez no facilmente editvel)
tarefa setupDatabaseTests << {
println "carregamento de dados de teste '
}
// Nossas alteraes para a tarefa (em um lugar que pode edit-los)
setupDatabaseTests {
doFirst {
println "criar esquema de banco de dados '
}
doFirst {
println 'drop esquema de banco'
}
}

Note-se que nos reunimos as vrias chamadas para doFirstdentro de um nico bloco de configurao, e isso ocorre aps a
ao inicial adicionado tarefa mundo.
2.4.1.3. doLast (fechamento)
O doLastmtodo muito semelhante ao doFirst ()mtodo, excepto que acrescenta comportamento para o fim de uma aco,
que em vez de antes. Se houvesse um bloco de cdigo que voc queria correr atrs uma tarefa existente foi feito em execuo,
voc pode fazer como mostrado na Exemplo 2.17, "Um exemplo do mtodo doLast" :
Exemplo 2.17. Um exemplo do mtodo doLast
tarefa setupDatabaseTests << {
println "criar esquema de banco de dados '
}
setupDatabaseTests.doLast {
println "carregamento de dados de teste '
}

Assim como doFirst, chamadas repetidas para doLastso aditivos. Cada chamada sucedendo anexa ao seu encerramento
para o final da lista a serem executados em ordem ( Exemplo 2.18, "Repetidas ligaes para doLast so aditivos" ).
Exemplo 2.18. Repetidas ligaes para doLast so aditivos
tarefa setupDatabaseTests << {
println "criar esquema de banco de dados '
}
setupDatabaseTests.doLast {
println "carregamento de dados de teste '
}
setupDatabaseTests.doLast {
println 'table verso update'
}

Como discutido na Seo 2.2, "Tarefa Ao" , o <<operador outra maneira de expressar uma chamada para o doLast ()
mtodo.

2.4.1.4. onlyif (fechamento)


O onlyifmtodo permite que voc expresse um predicado que determina se uma tarefa deve ser executada. O valor do
predicado o valor retornado pelo encerramento. Usando este mtodo, voc pode desabilitar a execuo de uma tarefa que
poderiam correr como uma parte normal da cadeia de dependncia da construo.

http://www.gradleware.com/registered/books/building-and-testing/tasks.html

5/13

28/8/2014

Captulo 2 Tarefas gradle


Em Groovy, a ltima declarao de encerramento o valor de retorno do fechamento, mesmo que no haja retorno
declarao dada. Um mtodo Groovy contendo uma nica expresso uma funo que retorna o valor dessa expresso.

Exemplo 2.19. A tomada de arquivo de construo utilizao do mtodo onlyif.


tarefa createSchema << {
println "criar esquema de banco de dados '
}
tarefa loadTestData (dependson: createSchema) << {
println "carregamento de dados de teste '
}
loadTestData.onlyIf {
System.properties [ 'load.data' ] == 'true'
}

Exemplo 2.20. Dois invocaes do arquivo de construo anterior. Nota resultados diferentes.
$ Construir loadTestData
criar banco de dados esquema
: LoadTestData pulado
$ Gradle -Dload.data = true loadTestData
: CreateSchema
criar banco de dados esquema
: LoadTestData
dados de teste de carga
$

Usando o onlyifmtodo, voc pode alternar tarefas individuais dentro e fora usando qualquer lgica voc pode expressar no
cdigo Groovy, no apenas os simples testes de propriedade do sistema que usamos aqui. Voc pode ler arquivos, chamar os
servios web, verifique as credenciais de segurana, ou apenas sobre qualquer outra coisa.

2.4.2. Propriedades de DefaultTask


2.4.2.1. didWork
A propriedade booleana que indica se a tarefa foi concluda com xito. Nem todas as tarefas podem definir didWorkaps a
concluso, mas algumas tarefas internas como compilar, copiare excluirtarefas configur-lo para refletir o sucesso ou
fracasso de suas aes. A avaliao de uma tarefa de ter trabalhado especfico para a tarefa. Por exemplo, a implementao
atual do JavaCompilerretorna didWorkde verdadeiro se pelo menos um arquivo compilado com sucesso. Voc capaz de
definir o didWorkpropriedade em suas prprias aes de tarefa para refletir os resultados do cdigo de construo que voc
escreve.
Exemplo 2.21. Enviar um e-mail sobre compilao bem-sucedida
aplicar plugin: 'java'
tarefa emailMe (dependson: compileJava) << {
se (tasks.compileJava.didWork) {
println "SUCESSO SEND e-mail anunciando '
}
}

Exemplo 2.22. Os resultados da construo didWork


$ Gradle -b didWork.gradle emailMe
Enviar e-mail SUCESSO ANUNCIANDO
$

2.4.2.2. ativado
A propriedade booleana que indica se a tarefa ser executada. Voc pode definir qualquer tarefa habilitadopropriedade para
false para fazer com que ele no seja executado. Suas dependncias ainda ir executar da maneira que seria se a tarefa foram
habilitados.
Exemplo 2.23. Desativao de uma tarefa
modelos de tarefas << {
println 'modelos de processo de e-mail dos
}
tarefa SendEmails (dependson: templates) << {
println "Enviar e-mails '
}

http://www.gradleware.com/registered/books/building-and-testing/tasks.html

6/13

28/8/2014

Captulo 2 Tarefas gradle


sendEmails.enabled = false

Exemplo 2.24. A construo de uma tarefa desativado. Note-se que a dependncia ainda corre.
$ Gradle -b enabled.gradle SendEmails
: modelos
modelos de processo de e-mail
: SendEmails pulado
$

Os -bpontos de comutao de linha de comando gradle para um arquivo de construo no-padro. Por padro, ele procura
por um arquivo chamado build.gradle, mas essa opo nos permite apontar para um arquivo diferente.

2.4.2.3. caminho
Uma propriedade string contendo o caminho completo de uma tarefa. Por padro, o caminho de uma tarefa simplesmente o
nome da tarefa com dois pontos de ataque. O seguinte arquivo de construo ilustra isso.
Exemplo 2.25. Um arquivo de configurao de nvel nico caminho que ecoa a sua nica tarefa
tarefa echoMyPath << {
println "PATH DESTE tarefa $ {path}"
}

Exemplo 2.26. Os resultados da compilao anterior de arquivo


$ Gradle -b path.gradle echoMyPath
Este caminho a tarefa de IS: echoMyPath
$

O clon levando indica que a tarefa est localizado no arquivo de configurao de nvel superior. No entanto, para uma
determinada construo, nem todas as tarefas devem estar presentes no arquivo de configurao de nvel superior, uma vez que
suporta Gradle subprojetos dependentes, ou aninhado constri. Se a tarefa existia em uma compilao chamada aninhada
subprojeto, ento o caminho seria : subprojeto: echoMyPath. Para mais detalhes sobre aninhados constri, consulte o
Captulo 6, multiproject Builds .
2.4.2.4. logger
Uma referncia para o Gradle interna loggerobjeto. O Gradle loggerimplementa a interface org.slf4j.Logger, mas com alguns
nveis de log extras adicionados. Os nveis de registo suportados pelo loggerso os seguintes. Definir o nvel de log de
um
permite a sada do log de
todos os nveis de log seguintes, com exceo de WARNe QUIETconforme indicado:
DEBUG. Para mensagens de registro de alto volume, que so de interesse para o desenvolvedor de construo, mas deve
ser suprimida durante a execuo normal de construo. Quando esse nvel de log est selecionado, Gradle fornece
automaticamente um formatador de log mais ricos, incluindo o timestamp, o nvel de log, eo nome logger de cada
mensagem. Todos os outros nveis de log emitir apenas a mensagem de log sem decorao.
INFO. Por menor volume de mensagens de compilao informativo que pode ser de opcional interesse durante a execuo
de construo.
CICLO DE VIDA. Mensagens de baixo volume, geralmente a partir de si Gradle, sobre as mudanas no ciclo de vida de
compilao e execuo da ferramenta de construo. Quando Gradle executado sem o qopo de linha de comando, este
o nvel de log padro. As chamadas para o printlnmtodo emitem declaraes de registro, a este nvel.
WARN. Baixo volume, mas as mensagens importantes, alertando o executor da construo de problemas potenciais. Quando
o nvel de log definido para WARN, QUIETmensagens -Level no so emitidos.
QUIET. Mensagens que devem aparecer mesmo que o interruptor tranquila foi especificado na linha de comando Gradle.
(Execuo Gradle com o qopo de linha de comando faz com que este seja o nvel de log padro.) System.out.println
direcionado para o registrador, a este nvel de log. Quando o nvel de log definido para QUIET, WARNmensagens -Level
no so emitidos.
ERROR. Mensagens rara, mas extremamente importantes de registro que devem ser emitidos em todos os casos. Destina-se
a comunicar as falhas de construo. Se o nvel de registo estiver definido como ERROR, as chamadas para
System.out.printlnno vai aparecer no console.

Exemplo 2.27. Uma tarefa que ilustra os efeitos de cada nvel de log. Este cdigo um pouco mais complicado Groovy define o nve
tarefa logLevel << {
def nveis = [ 'debug' ,
'info' ,
'ciclo de vida' ,
'Quiet' ,
'Avisar' ,
'error' ]

http://www.gradleware.com/registered/books/building-and-testing/tasks.html

7/13

28/8/2014

Captulo 2 Tarefas gradle

levels.each {nvel ->


logging.level = nvel
def logMessage = "ACERTO LogLevel = $ {nvel}"
logger.error logMessage
logger.error '-' * logMessage.size ()
logger.debug 'DEBUG enabled'
logger.info 'INFO enabled'
logger.lifecycle 'LIFECYCLE enabled'
logger.warn 'Avisar enabled'
logger.quiet 'QUIET enabled'
logger.error 'ERRO enabled'
println 'Este OUTPUT println'
logger .error '
}

Exemplo 2.28. A sada gerada pelo arquivo de configurao anterior.


$ Gradle -b logging.gradle logLevel
16: 02: 34.883 [ERROR] [org.gradle.api.Task] CONFIGURAO LogLevel = DEBUG
16: 02: 34,902 [ERROR] [org.gradle.api.Task] ---------------------16: 02: 34,903 [DEBUG] [org.gradle.api.Task] DEBUG HABILITADO
16: 02: 34,903 [INFO] [org.gradle.api.Task] INFO HABILITADO
16: 02: 34.904 [LIFECYCLE] [org.gradle.api.Task] LIFECYCLE HABILITADO
16: 02: 34.904 [AVISO] [org.gradle.api.Task] WARN HABILITADO
16: 02: 34,905 [QUIET] [org.gradle.api.Task] QUIET HABILITADO
16: 02: 34,905 [ERROR] [org.gradle.api.Task] ERROR HABILITADO
16: 02: 34,906 [ERROR] [org.gradle.api.Task]
AJUSTE LogLevel = INFO
--------------------INFO HABILITADO
CICLO DE VIDA HABILITADO
WARN HABILITADO
QUIET HABILITADO
ERROR HABILITADO
AJUSTE LogLevel = LIFECYCLE
-------------------------CICLO DE VIDA HABILITADO
WARN HABILITADO
QUIET HABILITADO
ERROR HABILITADO
AJUSTE LogLevel = QUIET
---------------------QUIET HABILITADO
ERROR HABILITADO
AJUSTE LogLevel = WARN
--------------------WARN HABILITADO
ERROR HABILITADO
AJUSTE LogLevel = ERRO
---------------------ERROR HABILITADO
$

2.4.2.5. logging
O registro depropriedade nos d acesso ao nvel de log. Como ilustrado na discusso da propriedade logger , o logging.level
propriedade pode ser lido e escrito para mudar o nvel de registro em uso pela construo.
2.4.2.6. descrio
A descrioda propriedade apenas o que parece: um pequeno pedao de metadados legvel para documentar o efeito de uma
tarefa. Existem vrias maneiras de definir uma descrio, como mostrado na Exemplo 2.29, "Configurando a descrio e
comportamento tarefa all in one" e Exemplo 2.30, "As duas maneiras de declarar o comportamento da tarefa e uma descrio
em separado" .
Exemplo 2.29. Definir o comportamento descrio e tarefas em um nico
tarefa helloWorld (descrio: "Diz Ol para o mundo ' ) {<<
println "Ol, mundo"
}

Exemplo 2.30. As duas maneiras de declarar o comportamento da tarefa e uma descrio em separado
tarefa helloWorld << {
println "Ol, mundo"
}
helloWorld {
description = 'Diz Ol para o mundo'
}

http://www.gradleware.com/registered/books/building-and-testing/tasks.html

8/13

28/8/2014

Captulo 2 Tarefas gradle


// Outra maneira de faz-lo
helloWorld.description = 'Diz Ol para o mundo'

2.4.2.7. temporaryDir
O temporaryDirpropriedade retorna um arquivoobjeto apontando para um diretrio temporrio pertencente a este arquivo de
construo. Este diretrio geralmente disponveis para uma tarefa que precisam de lugar temporrio para armazenar
resultados intermedirios de qualquer trabalho, ou para a fase de arquivos para o processamento dentro da tarefa.

2.4.3. Propriedades dinmicas


Como vimos, as tarefas vm com um conjunto de propriedades intrnsecas, que so indispensveis
para o usurio Gradle. No
entanto, tambm pode atribuir quaisquer outras propriedades que queremos uma tarefa. A funes tarefa objeto como um mapa
hash, capaz de conter quaisquer outros nomes de propriedades arbitrrios e valores que importam para atribuir a ele (desde que
os nomes no colidem com o built-in nomes de propriedades).
Deixando nosso familiar "Ol, mundo" exemplo, vamos supor que ns tivemos uma tarefa chamada criar Artefatoque
dependia de uma tarefa chamados CopyFiles. O trabalho dos CopyFiles coletar arquivos de vrias fontes e copi-los para um
diretrio temporrio, que o createArtifacttarefa, mais tarde, montar em um artefato de implementao. A lista de arquivos
pode mudar dependendo dos parmetros da compilao, mas o artefato deve conter listando-os, para satisfazer alguma
necessidade do aplicativo implementado um manifesto. Esta uma ocasio perfeita para usar um propriedade dinmica (
Exemplo 2.31, "Build arquivo mostrando uma propriedade dinmica de tarefas" e Exemplo 2.32, "A sada do arquivo de
construo acima" ).
Exemplo 2.31. Construir arquivo mostrando uma propriedade dinmica de tarefas
tarefa CopyFiles {
// Localizar arquivos de qualquer lugar, copi-los
// (ento codificar uma lista de arquivos para ilustrao)
fileManifest = [ 'data.csv' , 'config.json' ]
}
tarefa createArtifact (dependson: CopyFiles) << {
println "arquivos no manifesto: $ {copyFiles.fileManifest}"
}

Exemplo 2.32. A sada do arquivo de construo acima


$ Gradle -b dynamic.gradle createArtifact
ARQUIVOS EM MANIFESTO: [data.csv, config.json]
$

2.5. Tipos de tarefas


Como discutimos na Seo 2.4, "Tarefas so objetos" , cada tarefa tem um tipo. Alm da DefaultTask, existem tipos de tarefa
para copiar, arquivar, executando programas e muitos mais. Declarando um tipo de tarefa um pouco como estender uma
classe base em uma linguagem de programao orientada a objetos: voc pode obter certos mtodos e propriedades disponveis
na sua tarefa de forma gratuita. Isso faz com que as definies da tarefa muito concisas que pode realizar muito.
Uma referncia tarefa completa est alm do escopo deste volume, mas aqui esto algumas importantes tipos com um exemplo
de como usar cada um.

2.5.1. Cpia
A copia arquivos da tarefa de cpia de um lugar para outro ( Exemplo 2.33, "Um exemplo simples a tarefa de cpia" ). Na sua
forma mais bsica, ele copia os arquivos de um diretrio para outro, com restries opcionais em que padres de arquivos so
includos ou excludos.
Exemplo 2.33. Um exemplo simples da tarefa cpia
tarefa CopyFiles (tipo: Copiar) {
de "recursos"
para 'target'
incluir '** / *. xml' , '** / *. txt' , '** / *. Propriedades'
}

A tarefa de cpia criar o diretrio de destino se ele j no existir. Neste caso, a tarefa CopyFiles ir copiar todos os arquivos com
a .xml .properties, ou extenses txt do diretrio de recursos para o diretrio de destino. Note-se que a partir de, eme incluem
mtodos so herdados da cpia.

2.5.2. Jar
A tarefa cria um arquivo Jar Jar de arquivos de origem ( Exemplo 2.34, "Um exemplo simples da tarefa Jar no exemplo do projeto
jar-tarefa" ). O plug-in Java cria uma tarefa deste tipo, chamado sem surpresa jar. Ele empacota o conjunto principal e recursos
fonte juntamente com um manifesto trivial em um frasco com o nome do projeto no build / libsdo diretrio. A tarefa
altamente personalizvel.

http://www.gradleware.com/registered/books/building-and-testing/tasks.html

9/13

28/8/2014

Captulo 2 Tarefas gradle

Exemplo 2.34. Um exemplo simples da tarefa Jar no exemplo do projeto jar-tarefa


aplicar plugin: 'java'
tarefa customJar (tipo: Jar) {
manifesto {
atributos firstKey: 'FirstValue' , secondKey: 'SecondValue'
}
ArchiveName = 'hello.jar'
destinationDir = file ( "$ {} builddir / jarros" )
de sourceSets.main.classes
}

Note que o nome do arquivo e diretrio de destino so facilmente configurveis. Da mesma forma, o manifesto pode ser
preenchido com atributos personalizados utilizando uma sintaxe mapa Groovy legvel. O contedo do JAR so identificados pelo
sourceSets.main.classes delinha, que especifica que os arquivos compilados .class das principais fontes de Java devem ser
includos. A partir demtodo idntico ao que foi utilizado no CopyTaskexemplo, o que revela uma observao interessante:
a tarefa frasco se estende a tarefa de cpia. Mesmo antes vimos documentao exaustiva do modelo de objeto Gradle e DSL,
esses detalhes sugerem a riqueza ea ordem da estrutura subjacente.
A expresso que est sendo atribudo a destinationDir digno de nota. Seria natural apenas para atribuir uma string para
destinationDir, mas a propriedade espera um argumento compatvel com java.io.File. O file ()mtodo, que est
sempre disponvel dentro de um Gradle construir arquivo, converte a string para um arquivoobjeto.
Lembre-se, voc sempre pode abrir o / DSL / index.html docsarquivo de documentao no padro Gradle
caractersticas como a tarefa Jar. A documentao completa da tarefa Jar e suas tarefas companheiro est fora do escopo
deste livro.

2.5.3. JavaExec
A tarefa JavaExec corre uma classe Java com um mtodo main (). De linha de comando Java pode ser um incmodo, mas essa
tarefa tenta tirar o incmodo de distncia e integrar de linha de comando invocaes Java em sua construo.
Exemplo 2.35. A tarefa Gradle executar uma linha de comando programa Java (a partir do exemplo javaexec-tarefa)
aplicar plugin: 'java'
repositrios {
mavenCentral ()
}
dependncias {
runtime "commons-codec: commons-codec: 1.5 '
}
codificar tarefa (tipo: JavaExec, dependson: classes) {
principais = 'org.gradle.example.commandline.MetaphoneEncoder'
args = "A chuva na Espanha cai principalmente na plancie" .split (). ToList ()
classpath sourceSets.main.classesDir
configurations.runtime classpath
}

A propriedade classpath na codificaotarefa definido como algo chamado configuration.runtime. A configurao


um conjunto de dependncias que tm algo em comum. Neste caso, o tempo de execuode configurao mantm todas
as dependncias que devem estar disponveis para o programa em tempo de execuo. Isso est em contraste com as
dependncias que so necessrios apenas durante a compilao, ou apenas enquanto os testes esto sendo executados, ou
que so necessrios em tempo de compilao e tempo de execuo, mas que so fornecidos por um ambiente de tempo de
execuo como um servidor de aplicativos. A configuraoda propriedade em Gradle uma coleo de todas as
configuraes definidas pela construo, cada um dos quais um conjunto de dependncias reais.
Este arquivo de construo declara uma dependncia externa: a biblioteca Apache Commons Codec. Normalmente, a gente tem
que compilar o nosso arquivo Java, ento inventar uma javalinha de comando , incluindo o caminho para os arquivos de classe
compilados ea dependncia JAR. Neste arquivo de construo, no entanto, ns simplesmente identificar a classe principal para
ser executado ( org.gradle.example.commandline.MetaphoneEncoder), fornec-lo com alguns argumentos de linha de
comando na forma de uma lista, e apont-lo para os elementos de caminho de classe gradle ele precisa. Neste caso, pode-se
simbolicamente se referem s classes da sourceSet principal e todas as dependncias declaradas na compilaode
configurao. Se tivssemos um complexo conjunto de dezenas de dependncias de vrios repositrios-incluindo at mesmo
alguns estaticamente gerenciados dependncias no projeto diretrio esta tarefa simples que ainda trabalham.

2.6. Tipos de tarefas personalizado


Haver ocasies em que tipos de tarefas internas do gradle no vai bem fazer o trabalho, e em vez disso, a forma mais
expressiva para desenvolver a sua construo ser a criao de uma tarefa personalizada. Gradle tem vrias maneiras de fazer
isso. Vamos discutir as duas formas mais comuns aqui.

http://www.gradleware.com/registered/books/building-and-testing/tasks.html

10/13

28/8/2014

Captulo 2 Tarefas gradle

2.6.1. Tipos de tarefas personalizadas no arquivo de construo


Suponha que o seu arquivo de construo precisa emitir consultas arbitrrias contra um banco de dados MySQL. Existem vrias
maneiras de conseguir isso em Gradle, mas voc decide uma tarefa personalizada a forma mais expressiva de faz-lo. A
maneira mais fcil de introduzir o trabalho simplesmente criar-lo em seu script de construo, como mostrado aqui:

Exemplo 2.36. A tarefa personalizada para executar consultas em um banco de dados MySQL (a partir do exemplo custom-tarefa)
tarefa createDatabase (tipo: MySqlTask) {
sql = "CREATE DATABASE IF NOT EXISTS exemplo '
}
tarefa createUser (tipo: MySqlTask, dependson: createDatabase) {
sql = "GRANT ALL ON PRIVILGIOS exemplo. *
A exampleuser localhost identificado por 'passw0rd' "
}
tarefa CreateTable (tipo: MySqlTask, dependson: createUser) {
username = 'exampleuser'
password = 'passw0rd "
banco de dados = "exemplo"
sql = "CREATE TABLE IF NOT EXISTS usurios
(ID BIGINT PRIMARY KEY, nome de usurio VARCHAR ( 100 )) '
}
classe MySqlTask
estende DefaultTask {
def hostname = 'localhost'
def port = 3306
def sql
banco de dados def
def username = 'root'
def password = 'password'

TaskAction
def RunQuery () {
def cmd
se (base de dados) {
cmd = "mysql-u $ {username}-p $ {password} {hostname -h $}
P {$ port} $ {} -e banco de dados "
}
else {
cmd = "mysql-u $ {username}-p $ {password} {hostname -h $} P {$ port} -e"
}
project.exec {
commandLine = cmd.split (). ToList () + sql
}
}

A tarefa personalizada, MySqlTask


, estende o DefaultTaskclasse. Todas as tarefas personalizadas devem estender essa classe
ou um de seus descendentes. (A tarefa personalizada pode estender quaisquer outros tipos de tarefa que DefaultTask. Veja
tipos de tarefas para obter uma descrio dos tipos de tarefas internas mais importantes.) A tarefa declara propriedades (ie,
hostname, banco de dados, sql, etc) no convencional linguagem Groovy . Em seguida, ele declara um mtodo nico,
RunQuery (), que anotado com o TaskActionanotao. Este mtodo ser executado quando a tarefa executada.
As tarefas de compilao reais no topo do arquivo de construo tudo se declarem do MySqlTask
tipo. Ao fazer isso, eles herdam
automaticamente as propriedades e ao dessa classe de tarefas. Porque a maioria das propriedades tm padres (alguns dos
quais, como o nome de usurio e senha, so, obviamente, especfico para a compilao), cada invocao da tarefa tem muito
pouco para configurar. Os CreateDatabasee CREATEUSERtarefas so capazes de configurar apenas uma nica consulta SQL, e
permitir que os padres para assumir a partir da.
O CreateTabletarefa substitui o nome de usurio, senhae banco de dadosde propriedades, uma vez que suas dependncias
de tarefas criaram um novo banco de dados e nome de usurio separada das definies administrativas padro. O padro de
fornecimento de uma configurao padro til, que pode ser substitudo, quando necessrio, um tema recorrente em Gradle.

2.6.2. As tarefas personalizadas em rvore de fontes


Lgica de tarefas personalizado significativo no se encaixam bem em um arquivo de construo. Algumas linhas simples de
scripting pode pragmaticamente ser inserido em uma tarefa curta, como o costume-tarefaexemplo. No entanto, em algum
momento, uma tarefa sofisticada ir desenvolver uma hierarquia de classe prpria, pode desenvolver uma dependncia de APIs
externas, e ter testes automatizados. A construo de cdigo e cdigo de construir complexo deve ser tratado como um
cidado de primeira classe de mundo do desenvolvimento. Gradle torna isso fcil.
Quando a lgica de tarefas personalizado supera o arquivo de construo, podemos migr-lo para o buildSrcdiretrio na raiz do
projeto. Este diretrio automaticamente compilado e adicionado ao classpath de compilao. Aqui est como gostaramos de
alterar o exemplo anterior para usar o buildSrcdiretrio.
Exemplo 2.37. Um arquivo de configurao usando uma tarefa de costume no definido no script de construo
tarefa createDatabase (tipo: MySqlTask) {
sql = "CREATE DATABASE IF NOT EXISTS exemplo '
}

http://www.gradleware.com/registered/books/building-and-testing/tasks.html

11/13

28/8/2014

Captulo 2 Tarefas gradle


tarefa createUser (tipo: MySqlTask, dependson: createDatabase) {
sql = "GRANT ALL ON PRIVILGIOS exemplo. *
A exampleuser localhost identificado por 'passw0rd' "
}
tarefa CreateTable (tipo: MySqlTask, dependson: createUser) {
username = 'exampleuser'
password = 'passw0rd "
banco de dados = "exemplo"
sql = "CREATE TABLE IF NOT EXISTS usurios
(ID BIGINT PRIMARY KEY, nome de usurio VARCHAR ( 100 )) '
}

Exemplo 2.38. A definio da tarefa personalizada no diretrio buildSrc


importao org.gradle.api.DefaultTask
importao org.gradle.api.tasks.TaskAction
classe MySqlTask
estende DefaultTask {
def hostname = 'localhost'
def port = 3306
def sql
banco de dados def
def username = 'root'
def password = 'password'

TaskAction
def RunQuery () {
def cmd
se (base de dados) {
cmd = "mysql-u $ {username}-p $ {password} {hostname -h $}
P {$ port} $ {} -e banco de dados "
}
else {
cmd = "mysql-u $ {username}-p $ {password} {hostname -h $} P {$ port} -e"
}
project.exec {
commandLine = cmd.split (). ToList () + sql
}
}

Note-se que a definio da tarefa no buildSrcdiretrio muito semelhante ao cdigo includo no script de construo no
exemplo anterior. No entanto, agora temos uma plataforma robusta para a elaborao de que o comportamento de tarefa
simples, crescendo um modelo de objeto, escrever testes, e fazer tudo o mais que normalmente fazemos no desenvolvimento de
software.
Voc tem quatro opes para onde colocar o seu costume Gradle construir cdigo. A primeira no prprio script de
construo, em um bloco de ao tarefa. O segundo o buildSrcdiretrio que ns mostramos aqui. O terceiro est em um
arquivo script de construo separado importados para o script de construo principal. O quarto est em um plug-in
personalizado escrito em Java ou Groovy. Programao Gradle com plug-ins personalizados ser o tema de um volume
separado.
Exemplo 2.39. A estrutura de um projeto Gradle com cdigo personalizado no diretrio buildSrc.
.
build.gradle
buildSrc
src
principal
Groovy
org
gradle
exemplo
tarefa
MySqlTask.groovy

2.7. Onde fazer tarefas vm?


At agora, temos vindo a criar tarefas de codificao-los diretamente, seja dentro Gradle criar scripts ou na buildSrcdiretrio
cdigo Groovy. Esta uma tima maneira de aprender sobre as tarefas, porque fcil de ver todas as partes mveis em grande
detalhe. No entanto, muitas das tarefas que voc usa no vai ser tarefas que voc escreve; eles vm de plug-ins.
Voc j viu um exemplo disso na seo sobre a construo de cdigo Java . Ao aplicar o plug-in Java, o script de construo
automaticamente herda um conjunto de tarefas cujo cdigo voc nunca v diretamente. Voc pode modificar o comportamento
dessas tarefas usando a configurao da tarefa , doFirst (), e doLast ()mtodos que cobrimos neste captulo, mas voc no
tem que codific-las o youself. O fato de que Gradle est fornecendo funcionalidade rica tarefa, extensvel cujo cdigo voc
nunca tem que olhar para cdigo que voc invocar atravs do Gradle DSL, no atravs de muita literal Groovy cdigo essencial
para a estratgia da Gradle de provding alta extensibilidade com baixa complexidade .

http://www.gradleware.com/registered/books/building-and-testing/tasks.html

12/13

28/8/2014

Captulo 2 Tarefas gradle

Gradle tambm tem algumas tarefas internas, como as tarefase propriedades. Estes no so fornecidos por qualquer plug-in
ou qualquer cdigo imperativo que voc escreve, mas so apenas uma parte padro do DSL Gradle. Eles so cobertos na seo
sobre a linha de comando Gradle .

2.8. Concluso
Ns tivemos um olhar muito profundo em tarefas neste captulo. Ns olhamos como configur-los e como fazer um script eles, e
comeado uma idia de como Gradle divide-se o trabalho de configurao e execuo entre duas fases do ciclo de vida. Temos
visto que as tarefas so de primeira classe objetos Groovy com uma rica API prpria. Ns exploramos essa API apenas o
suficiente para mostrar-lhe como pensar em tarefas como entidades programveis. Tambm olhamos para alguns tipos de classe
padro que oferecem funcionalidade real fora da caixa.
Finalmente ns olhamos como escrever as tarefas de seu prprio pas. Tarefas internas do gradle e plug-ins so o suficiente para
muitos usurios de seu roteiro constri sem qualquer cdigo personalizado, mas nem sempre. Uma das sensibilidades
fundamentais do gradle que ele deve ser fcil para voc estender a sua construo sem encher seus scripts de construo com
um monte de cdigo Groovy insustentvel. Os exemplos de tarefas personalizados ns olhamos ilustrou este.
As tarefas so a unidade bsica da atividade de construo em Gradle. H mais a sua histria de uma introduo pode cobrir,
mas com este captulo com o seu cinto, voc est bem preparado para comear a us-los e continuar a aprender sobre eles.

Anterior

http://www.gradleware.com/registered/books/building-and-testing/tasks.html

ndice

Prxima

13/13

Você também pode gostar