Escolar Documentos
Profissional Documentos
Cultura Documentos
Anterior
ndice
Prxima
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
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.
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
http://www.gradleware.com/registered/books/building-and-testing/tasks.html
2/13
28/8/2014
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
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'
}
http://www.gradleware.com/registered/books/building-and-testing/tasks.html
4/13
28/8/2014
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.
http://www.gradleware.com/registered/books/building-and-testing/tasks.html
5/13
28/8/2014
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.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
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}"
}
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
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
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.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
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
}
http://www.gradleware.com/registered/books/building-and-testing/tasks.html
10/13
28/8/2014
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
}
}
http://www.gradleware.com/registered/books/building-and-testing/tasks.html
11/13
28/8/2014
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
http://www.gradleware.com/registered/books/building-and-testing/tasks.html
12/13
28/8/2014
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