Gradle - Exemplo Prático
Autor: Alisson Pedrina | Publicado: 2014-09-05T11:05:00-07:00


Gradle - Exemplo Prático

Exemplo prático do uso do Gradle integrado ao Eclipse












Introdução


Quem trabalha com o maven deve entender com um pouco mais de facilidade o que o Gradle é ou faz. No site do Gradle encontramos a descrição de que ele é uma maneira de construir builds, testar, implementar e publicar projetos que integra a flexibilidade do ant com a capacidade de gerenciamento de dependências e convenções do maven. Tudo isso acessível através de uma Internal DSL escrita em Groovy. Aqui cabe um comentário particularmente referente a que prefiro muito mais escrever um build utilizando essa Internal DSL em Groovy do que escrever xml declarativo como no caso do maven. &nbsp;

Instalação
Baixe o .zip com o binário do Gradle em:

http://www.gradle.org/downloads
Descompacte o .zip e crie a variável de ambiente:
- GRADLE_HOME

Referencie %GRADLE_HOME%\bin na variável&nbsp;PATH.

Abra um prompt de comandos e digite "gradle" se tudo der certo a saída será como a da Listagem 1:&nbsp;





Listagem 1




&gt; gradle &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;
&gt;&nbsp;:help

Welcome to Gradle 2.0.

To run a build, run gradle &lt;task&gt; ...

To see a list of available tasks, run gradle tasks

To see a list of command-line options, run gradle --help

BUILD SUCCESSFUL

Total time: 2.235 secs&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;












Projetos e Tarefas
Tudo no Gradle pode ser dividido em dois conceitos: projetos e tarefas. Cada build é direcionado para um ou mais projetos e cada projeto é composto por uma ou mais tarefas. Qualquer semelhança com outras ferramentas de build como o ant não é mera&nbsp;coincidência.&nbsp;

Quando executamos o comando gradle ele busca por um arquivo chamado build.gradle no diretório atual. Esse arquivo é o build script, este arquivo define o projeto e as tarefas.

Na documentação do Gradle existe muitos exemplos que exemplificam o poder da DSL construída com Groovy. Nas listagem 2 temos um exemplo simples de task salva no arquivo build.gradle.&nbsp;












Listagem 2




task javanapratica {
&nbsp;doLast{println 'Hello world!'} &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;
}

//execute na linha de comando no diretório aonde salvou o arquivo //build.gradle
&gt; gradle javanapratica












Observando o exemplo acima podemos ter uma ideia do quão poderoso pode ser um script Gradle, pois fazemos uso de Groovy, entretanto não vamos nos estender nestes exemplos simples e sim vamos logo ver exemplos de scripts referentes a projetos java.&nbsp;

Plugins

Podemos fazer uso de scripts para automatizar distintas tarefas. Existem vários plugins já desenvolvidos ou podemos criar os nossos próprios. Na Listagem 3 temos um exemplo de como usar o plugin java em nossos scripts.





Listagem 3





//conteúdo do build.gradle
apply plugin: 'java' &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;

//execute na linha de comando
&gt; gradle build&nbsp;

:compileJava
:processResources
:classes
:jar
:assemble
:compileTestJava
:processTestResources
:testClasses
:test
:check
:build&nbsp; &nbsp; &nbsp;
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;












Observe que no diretório no qual estamos executando os comandos são gerados alguns diretórios contento arquivos necessários para o gerenciamento dos builds, plugins e outras características utilizados pelo gradle.

Projeto Java

Vamos ver um exemplo de build.gradle referente a um projeto java. Na Listagem 3 temos um exemplo comentado para melhor entendimento.

Lembrando que a estrutura padrão de diretórios, por convenção, continua a mesma(veja o quadro 1).





Quadro 1






src
&nbsp; &nbsp; └── main
&nbsp; &nbsp; &nbsp; &nbsp; ├── java
&nbsp; &nbsp; &nbsp; &nbsp; │ &nbsp; └── seupacote &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; │ &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; │ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; │ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; └── webapp &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ├── WEB-INF
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; │ &nbsp; └── web.xml &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ├── css &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; │ &nbsp; ├── arquivo.css
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; │ &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; └── jsp &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ├── index.jsp














O maven possui a opção archetype que já nos fornece a estrutura pronta. No gradle por enquanto o equivalente é o exibido na Listagem 4.





Listagem 4




//tipos até o momento suportados: java-library, scala-library, pom,&nbsp;
//groovy-libray e basic

&gt; gradle init --type java-library &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;














Se listarmos os arquivos presentes em nosso diretório atual, digamos que seja o "D:\projetos\gradle", vemos que existem dois diretórios que o gradle gerou automaticamente: .gradle e build.

O .gradle contém arquivos necessários para o gerenciamento de plguins, cache, etc. E o build contém os arquivos envolvidos no processo de build de nosso projeto.&nbsp;

Podemos limpar o nosso diretório build com o comando: 'clean' (e.g gradle clean). O plugin java tem outras duas tasks: assemble e check. Assemble também compila o código e cria o .jar mas não roda os testes. Veja na Listagem 5 os passos que a task executa.





Listagem 5





D:\projetos\gradle&gt;gradle assemble &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;
:compileJava&nbsp;
:processResources
:classes
:jar
:assemble














Para gerenciamento das dependências de nosso projeto java vamos usar o repositório maven. Veja como fazer isso na Listagem 6.




Listagem 6





apply plugin: 'java'
repositories {
&nbsp; &nbsp; mavenCentral()
}
dependencies {
&nbsp; &nbsp; compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
&nbsp; &nbsp; testCompile group: 'junit', name: 'junit', version: '4.+'
}&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;















Integrando plugin para o Eclipse



Para deixar pronto o nosso projeto para utiliza-lo integrado ao eclipse precisamos instalar mais um plugin. Na Listagem 6 temos os passos necessários para tal procedimento.





Listagem 6





apply plugin: 'eclipse' &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;
















A Listagem 6 mostrou a integração do Gradle com o Eclipse agora podemos instalar um plugin no Eclipse para integrar com o Gradle. Segue abaixo o procedimento:



1 - Help -&gt; Eclipse MarketPlace;



2 - Pesquise por Gradle e instale o 'Gradle Integration for Eclipse';



Após instalar o plugin importe o projeto que acabamos de criar na linha de comando&nbsp;(e.g "D:\projetos\gradle")&nbsp;como um projeto Gradle já existente.&nbsp;Assim ao clicarmos com o botão direito no projeto já importado teremos as opções do Gradle disponíveis.



Outra opção é criar um projeto novo do tipo Gradle (e.g File-&gt;New Project escolha o tipo Gradle).



Conclusão







Pessoal este post é o básico do básico para conhecer o Gradle no próximo post vamos nos aprofundar na criação, teste, implementação e outras tarefas de um projeto web em java com Gradle. Por hora espero que este post sirva como uma pequena introdução. Até mais.