Gradle - Tarefas

O script de compilação do Gradle descreve sobre um ou mais projetos. Cada projeto é composto de tarefas diferentes. Uma tarefa é uma parte do trabalho que uma construção executa. A tarefa pode ser compilar algumas classes, armazenar arquivos de classe em uma pasta de destino separada, criar JAR, gerar Javadoc ou publicar algumas conquistas em repositórios.

Este capítulo explica sobre o que é tarefa e como gerar e executar uma tarefa.

Definindo Tarefas

Tarefa é uma palavra-chave usada para definir uma tarefa no script de construção. Dê uma olhada no exemplo a seguir, que representa uma tarefa chamadahello que imprime tutorialspoint. Copie e salve o seguinte script em um arquivo chamadobuild.gradle. Este script de construção define um nome de tarefa hello que é usado para imprimir a string tutorialspoint.

task hello {
   doLast {
      println 'tutorialspoint'
   }
}

Execute o seguinte comando no prompt de comando. Ele executa o script acima. Você deve executar isso onde o arquivo build.gradle está armazenado.

C:\> gradle –q hello

Resultado:

tutorialspoint

Você pode simplificar esta tarefa de olá especificando um atalho (representa um símbolo <<) ao doLastdeclaração. Se você adicionar este atalho à tarefa acimahello será semelhante ao seguinte script.

task hello << {
   println 'tutorialspoint'
}

Você pode executar o script acima usando gradle –q hello comando.

Aqui estão algumas variações na definição de uma tarefa, dê uma olhada nelas. O exemplo a seguir define uma tarefahello.

Copie e salve o seguinte código em build.gradle Arquivo.

task (hello) << {
   println "tutorialspoint"
}

Execute o seguinte comando no prompt de comando. Ele executa o script fornecido acima. Você deve executar isso, onde o arquivo build.gradle é armazenado.

C:\> gradle –q hello

Resultado:

tutorialspoint

Você também pode usar strings para os nomes das tarefas. Dê uma olhada no mesmo exemplo hello. Aqui, usaremos String como tarefa.

Copie e salve o seguinte código em build.gradle Arquivo.

task('hello') << {
   println "tutorialspoint"
}

Execute o seguinte comando no prompt de comando. Ele executa o script fornecido acima. Você deve executar isso, onde o arquivo build.gradle é armazenado.

C:\> gradle –q hello

Resultado:

tutorialspoint

Você também pode usar sintaxe alternativa para definir uma tarefa. Isso é usar o método create () para definir uma tarefa. Dê uma olhada no mesmo exemplo hello fornecido abaixo.

Copie e salve o código fornecido abaixo em build.gradle Arquivo.

tasks.create(name: 'hello') << {
   println "tutorialspoint"
}

Execute o seguinte comando no prompt de comando. Ele executa o script fornecido acima. Você deve executar isso, onde o arquivo build.gradle é armazenado.

C:\> gradle –q hello

Resultado:

tutorialspoint

Localizando Tarefas

Se você deseja localizar as tarefas definidas no arquivo de construção, deve usar as respectivas propriedades padrão do projeto. Isso significa que cada tarefa está disponível como uma propriedade do projeto, usando o nome da tarefa como o nome da propriedade.

Dê uma olhada no código a seguir que acessa tarefas como propriedades.

Copie e salve o código fornecido abaixo em build.gradle Arquivo.

task hello

println hello.name
println project.hello.name

Execute o seguinte comando no prompt de comando. Ele executa o script fornecido acima. Você deve executar isso, onde o arquivo build.gradle é armazenado.

C:\> gradle –q hello

Resultado:

hello
hello

Você também pode usar todas as propriedades por meio da coleção de tarefas.

Copie e salve o seguinte código em build.gradle Arquivo.

task hello

println tasks.hello.name
println tasks['hello'].name

Execute o seguinte comando no prompt de comando. Ele executa o script fornecido acima. Você deve executar isso, onde o arquivo build.gradle é armazenado.

C:\> gradle –q hello

Resultado:

hello
hello

Você também pode acessar o caminho da tarefa usando as tarefas. Para isso, você pode chamar o método getByPath () com um nome de tarefa, ou um caminho relativo, ou um caminho absoluto.

Copie e salve o código fornecido abaixo em build.gradle Arquivo.

project(':projectA') {
   task hello
}
task hello

println tasks.getByPath('hello').path
println tasks.getByPath(':hello').path
println tasks.getByPath('projectA:hello').path
println tasks.getByPath(':projectA:hello').path

Execute o seguinte comando no prompt de comando. Ele executa o script fornecido acima. Você deve executar isso, onde o arquivo build.gradle é armazenado.

C:\> gradle –q hello

Resultado:

:hello
:hello
:projectA:hello
:projectA:hello

Adicionando Dependências às Tarefas

Você pode fazer com que uma tarefa dependa de outra tarefa, o que significa que quando uma tarefa for concluída, apenas outra tarefa será iniciada. Cada tarefa é diferenciada com o nome da tarefa. A coleção de nomes de tarefas é referida por sua coleção de tarefas. Para se referir a uma tarefa em outro projeto, você deve usar o caminho do projeto como um prefixo para o respectivo nome da tarefa.

O exemplo a seguir que adiciona uma dependência de taskX para taskY.

Copie e salve o código fornecido abaixo em build.gradleArquivo. Dê uma olhada no código a seguir.

task taskX << {
   println 'taskX'
}
task taskY(dependsOn: 'taskX') << {
   println "taskY"
}

Execute o seguinte comando no prompt de comando. Ele executa o script fornecido acima. Você deve executar isso, onde obuild.gradle armazenamentos de arquivos.

C:\> gradle –q taskY

Resultado:

taskX
taskY

O exemplo acima está adicionando dependência na tarefa usando seus nomes. Há outra maneira de obter dependência de tarefa que é definir a dependência usando um objeto Task.

Tomemos o mesmo exemplo de taskY sendo dependente de taskX, mas estamos usando objetos de tarefa em vez de nomes de referência de tarefa.

Copie e salve o seguinte código em build.gradle Arquivo.

task taskY << {
   println 'taskY'
}
task taskX << {
   println 'taskX'
}
taskY.dependsOn taskX

Execute o seguinte comando no prompt de comando. Você deve executar isso onde o arquivo build.gradle está armazenado.

C:\> gradle –q taskY

Resultado:

taskX
taskY

O exemplo acima está adicionando dependência na tarefa usando seus nomes. Há outra maneira de obter dependência de tarefa que é definir a dependência usando um objeto Task.

Aqui, pegamos o mesmo exemplo de que taskY depende de taskX, mas estamos usando objetos de tarefa em vez de nomes de referência de tarefa. Dê uma olhada nisso.

Copie e salve o código fornecido abaixo em build.gradleArquivo. Dê uma olhada no código a seguir.

task taskX << {
   println 'taskX'
}
taskX.dependsOn {
   tasks.findAll { 
      task → task.name.startsWith('lib') 
   }
}
task lib1 << {
   println 'lib1'
}
task lib2 << {
   println 'lib2'
}
task notALib << {
   println 'notALib'
}

Execute o seguinte comando no prompt de comando. Ele executa o script fornecido acima. Você deve executar isso, onde obuild.gradle armazenamentos de arquivos.

C:\> gradle –q taskX

Resultado:

lib1
lib2
taskX

Adicionar uma descrição a uma tarefa

Você pode adicionar uma descrição à sua tarefa. Esta descrição é exibida durante a execuçãoGradle tasks. Isso é possível usando a palavra-chave de descrição.

Copie e salve o seguinte código em build.gradleArquivo. Dê uma olhada no código a seguir.

task copy(type: Copy) {
   description 'Copies the resource directory to the target directory.'
   from 'resources'
   into 'target'
   include('**/*.txt', '**/*.xml', '**/*.properties')
   println("description applied")
}

Execute o seguinte comando no prompt de comando. Você deve executar isso onde o arquivo build.gradle está armazenado.

C:\> gradle –q copy

Se o comando for executado com sucesso, você obterá a seguinte saída.

description applied

Ignorando Tarefas

Ignorar tarefas pode ser feito passando um fechamento de predicado. Isso só é possível se o método de uma tarefa ou um encerramento lançando umStopExecutionException antes que o trabalho real de uma tarefa seja executado.

Copie e salve o seguinte código em build.gradle Arquivo.

task eclipse << {
   println 'Hello Eclipse'
}

// #1st approach - closure returning true, if the task should be executed, false if not.
eclipse.onlyIf {
   project.hasProperty('usingEclipse')
}

// #2nd approach - alternatively throw an StopExecutionException() like this
eclipse.doFirst {
   if(!usingEclipse) {
      throw new StopExecutionException()
   }
}

Execute o seguinte comando no prompt de comando. Você deve executar isso onde o arquivo build.gradle está armazenado.

C:\> gradle –q eclipse

Estrutura da Tarefa

O Gradle tem diferentes fases, ao trabalhar com tarefas. Em primeiro lugar, existe uma fase de configuração, onde o código, que é especificado diretamente no encerramento de uma tarefa, é executado. O bloco de configuração é executado para todas as tarefas disponíveis e não apenas para aquelas tarefas que posteriormente são realmente executadas.

Após a fase de configuração, a fase de execução executa o código dentro do doFirst ou doLast encerramentos dessas tarefas, que são realmente executados.