Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

2 
Compilação e integração automatizadas 
 
Olá, estudante! 
Olá, estudante! 
Nesta semana, continuaremos os estudos da disciplina Gerência e Qualidade de Software, avançando em seu 
objetivo de “conhecer e aplicar os conceitos práticos relacionados à qualidade de software e as diferentes 
métricas para a sua avaliação”. 
Para isso, cobriremos um assunto com uma visão bastante prática, a automação de compilação e integração 
de software por meio de três diferentes ferramentas bem conhecidas por profissionais da engenharia de 
software – as ferramentas Maven, Gradle e CMake. 
Bom estudo para você! 
Objetivos de aprendizagem 
Ao final dessa semana, você deverá ser capaz de: 
• Conhecer a automação de compilação e integração de software via o uso das ferramentas Maven, 
Gradle e Cmake. 
 
Orientação de estudos 
Nesta semana, há três videoaulas, sendo três demonstrações básicas do uso de cada uma das três ferramentas 
cobertas no escopo desta disciplina, ou seja, Maven, Gradle e CMake. Você pode assisti-las nessa ordem. Há 
também materiais-base e materiais de apoio para ajudar a instalar, configurar e usar essas ferramentas já que 
o objetivo é que você adquira uma visão prática delas. 
 
Automação de compilação e integração com Maven 
Objetivos da aula 
Conhecer a automação de compilação e integração de software via o uso de uma 
ferramenta (ferramenta Maven). 
Maven 
Ferramenta de “automação de compilação” 
• Usada primariamente em Java, mas também outras linguagens 
• POM (Project Object Model), arquivo XML descreve o projeto de software sendo construído: 
• Dependências sobre módulos e componentes externos 
• Ordem de compilação 
• Diretórios 
• Plug-ins necessários 
• Objetivos pré-definidos para realizar certas tarefas bem definidas como compilação de código e empacotamento 
 
Ciclo de vida de construção 
1. process-resources mvn process-resources 
2. compile mvn compile 
3. process-test-resources mvn process-test-resources 
4. test-compile mvn test-compile 
5. test mvn test 
6. package mvn package 
7. install mvn install 
8. deploy mvn deploy 
 
PERGUNTA 1 
Uma característica da ferramenta Maven apresentada videoaula é: 
o ser uma ferramenta para automação de testes. 
o ser usada apenas em Java. 
 
o ter como base um arquivo XML para definir suas regras. 
o o projeto de software sendo construído deve incluir apenas dependências, ordem de compilação e 
diretórios. 
o ser baseada em um arquivo chamado OPM. 
 
Você acertou! Essa é a alternativa correta. O arquivo base POM é um arquivo XML. 
 
Automação de compilação e integração com Gradle 
Objetivos da aula 
Conhecer a automação de compilação e integração de software via o uso de uma ferramenta 
(ferramenta Gradle). 
 
 
PERGUNTA 1 
Uma característica da ferramenta Gradle apresentada videoaula é: 
o ter sido usado como inspiração para o Maven. 
o ter iniciado com C/C++, mas hoje suportar também 
Java. 
o usar uma linguagem de propósito geral. 
o ter como base um arquivo XML para definir suas regras. 
o suportar compilações incrementais. 
 
Automação de geração com CMake 
Objetivos da aula 
Conhecer a automação de compilação e integração de software via o uso de uma 
ferramenta (ferramenta CMake) 
 
PERGUNTA 1 
Uma característica da ferramenta Gradle apresentada videoaula é: 
o ser mais recente que Maven e Gradle. 
o oferecer menos funcionalidades que Maven e Gradle. 
o não ser possível executá-lo em linha de comando, no terminal. 
o ser focado em programas Java. 
o ser focado no Unix. 
 
Instalando, configurando e usando o Maven para gerenciar suas dependências e seus 
projetos Java 
 24/06/2014 Arquitetura de Software, Java 
Este artigo é uma introdução ao Maven, uma ferramenta de gerenciamento de dependências e ciclo 
de vida de um projeto em Java. 
Para usar o Maven, você precisa ter o JDK instalado. Você também pode integrá-lo à sua IDE. Para 
saber como instalar o JDK e o Eclipse, consulte os seguintes artigos: 
• Instalando e Configurando o Java Development Kit 7 para Desenvolvimento 
• Instalando, Configurando e Usando o Eclipse Kepler 
O que é o Maven? 
O Maven é uma ferramenta de gerenciamento de dependências e do ciclo de vida de projetos de 
software no sentido técnico. Isso inclui: 
• Facilitar a compilação do código, o empacotamento (JAR, WAR, EAR, …), a execução de 
testes unitários, etc. 
• Unificar e automatizar o processo de geração do sistema. Nada mais de uma coleção de 
passos e scripts a serem executados manualmente. 
• Centralizar informações organizadas do projeto, incluindo suas dependências, resultados 
de testes, documentação, etc. 
• Reforçar boas práticas de desenvolvimento, tais como: separação de classes de teste das 
classes do sistema, uso de convenções de nomes e diretórios, etc. 
• Ajuda no controle das versões geradas (releases) dos seus projetos. 
http://luizricardo.org/2014/06/instalando-configurando-e-usando-o-maven-para-gerenciar-suas-dependencias-e-seus-projetos-java/
http://luizricardo.org/2014/06/instalando-configurando-e-usando-o-maven-para-gerenciar-suas-dependencias-e-seus-projetos-java/
http://luizricardo.org/2014/06/instalando-configurando-e-usando-o-maven-para-gerenciar-suas-dependencias-e-seus-projetos-java/
http://luizricardo.org/categoria/arquitetura/
http://luizricardo.org/categoria/desenvolvimento/java/
http://maven.apache.org/
http://luizricardo.org/2013/11/instalando-e-configurando-o-java-development-kit-7-para-desenvolvimento/
http://luizricardo.org/2013/11/instalando-configurando-e-usando-o-eclipse-kepler/
Conceitos importantes 
Artefato (artifact) 
Um artefato é geralmente um arquivo JAR que fica no repositório do Maven, mas pode ser de outro 
tipo. 
Cada artefato é identificado através dos seguintes elementos: 
• Grupo: é como o endereço do site ao contrário, 
como br.com.starcode, org.apache, com.google, com.ibm, etc. 
• Identificador único de artefato: geralmente é o nome do projeto. Ele deve ser único por 
grupo. 
• Número de versão: a versão do projeto, como 1.4.2 ou 3.0. Se houver o sufixo -
SNAPSHOT (0.0.1-SNAPSHOT, por exemplo) significa que o projeto está em 
desenvolvimento e o pacote pode ser alterado. 
• Tipo do projeto: jar, war, ear, pom (projeto de configuração). 
• Classificador: identificação opcional para diferenciar variações da mesma versão. Por 
exemplo, se o programa é compilado para diferentes versões do Java podemos usar os 
classificadores jdk4 e jdk6. Se há variações específicas para Sistemas Operacionais, 
podemos ter os classificadores linux e windows. 
Repositório local 
É um diretório em seu PC onde os artefatos são armazenados após baixados de um repositório 
remoto na internet ou na intranet. Você também pode instalar os artefatos dos seus projetos nesse 
repositório executando o install do Maven. Continue lendo para entender o que é isso. 
O repositório possui uma estrutura padrão onde o Maven consegue encontrar os artefatos através da 
identificação do mesmo. 
Repositório remoto 
Consiste numa aplicação que disponibiliza artefatos do Maven. Pode ser um repositório público na 
Internet, onde criadores de bibliotecas e frameworks disponibilizam seus artefatos, ou pode ser um 
repositório privado da empresa, disponível na intranet. 
Existe um repositório central que já vem configurando no Maven, mas algumas empresas criam seus 
próprios repositórios. Inclusive você pode criar o seu instalando o Artifactory ou Nexus num servidor. 
Quando adicionamos esses repositórios remotos em nossa instalação do Maven, ele é capaz de 
localizar e baixar automaticamente as dependências através da identificação do artefato. 
Arquivo POM 
O arquivo pom (pom.xml) é a configuração principal do Maven e estará presente em todo projeto. 
Nele você declara a identificação do seu projeto (que após gerado será também um artefato Maven), 
as dependências, repositórios adicionais,etc. 
http://www.jfrog.com/home/v_artifactory_opensource_overview
http://www.sonatype.org/nexus/
Há um arquivo pom por projeto, mas ele pode herdar configurações de um parent pom, isto é, como 
se houvesse um projeto "pai". 
Ciclo de vida padrão do Maven 
O Maven possui um ciclo de vida padrão. Cada passo do ciclo de vida é chamado de Goal e possui 
plugins específicos. Os mais importantes são: 
• validate: valida o projeto e se as informações necessárias para os próximos passos estão 
disponíveis, como as dependências por exemplo. 
• compile: compila o código-fonte. 
• test: executa os testes unitários (JUnit, por exemplo). 
• package: empacota o código compilado em um JAR, WAR, etc. 
• integration-test: executa os testes de integração. 
• install: adiciona o pacote gerado ao repositório local, assim outros projetos na mesma 
máquina podem usar essa dependência. 
• deploy: copia o pacote final para o repositório remoto, disponibilizando-o para outros 
desenvolvedores e outros projetos. 
Os itens acima, nessa ordem, são passos comuns para geração de uma versão de qualquer sistema, 
não é mesmo? 
No Maven, você pode configurar detalhadamente cada um desses passos e até incluir novos. Por 
exemplo, alguns frameworks que geram código-fonte usam um goal generate-sources para fazer 
isso. 
Além disso, não é necessário executar todos os passos sempre. Você pode escolher qual deseja 
executar num determinado momento, mas o Maven sempre executará todos os passos anteriores. 
Por exemplo, enquanto você está desenvolvendo um módulo, a cada alteração pode executar o 
passo test para executar a validação, compilação e então os testes unitários. Então você só precisa 
executar os passos posteriores quando tiver concluído o trabalho. 
Para maiores informações sobre o ciclo de vida, consulte a documentação. 
Estrutura padrão de um projeto Maven 
A estrutura padrão do projeto inclui boas práticas (como separar as classes de teste das classes do 
sistema) e facilita aos novos desenvolvedores encontrar o que eles querem, já que todos os projetos 
seguirão uma estrutura semelhante. 
Veja a seguir os principais diretórios utilizados: 
• src/main/java: aqui fica o código-fonte do sistema ou biblioteca. 
• src/main/resources: arquivos auxiliares do sistema, como .properties, XMLs e 
configurações. 
• src/main/webapp: se for uma aplicação web, os arquivos JSP, HTML, JavaScript CSS vão 
aqui, incuindo o web.xml. 
http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
• src/test/java: as classes com seus testes unitários ficam aqui e são executadas 
automaticamente com JUnit e TestNG. Outros frameworks podem exigir configuração 
adicional. 
• src/test/resources: arquivos auxiliares usados nos testes. Você pode ter properties e 
configurações alternativas, por exemplo. 
• pom.xml: é o arquivo que concentra as informações do seu projeto. 
• target: é o diretório onde fica tudo que é gerado, isto é, onde vão parar os arquivos 
compilados, JARs, WARs, JavaDoc, etc. 
Para ver mais detalhes sobre a estrutura de diretórios do Maven, consulte a documentação. 
Usando o Maven em projetos já existentes 
Você pode ter ficado desapontado com a estrutura anterior, pois estava pensando em usar o Maven 
em um projeto que já começou, mas não quer ou não pode mudar a estrutura de pastas atuais. 
Saiba que o Maven é flexível e permite alterar toda a estrutura padrão. 
Por exemplo, é comum usar a pasta src para os fontes, ao invés de src/main/java. Para ajustar 
isso, basta adicionar uma tag <sourceDirectory> dentro da tag <build>, assim: 
<project> 
 ... 
 <build> 
 <sourceDirectory>src</sourceDirectory> 
 ... 
 </build> 
 ... 
</project> 
Não vou ir fundo nessa questão, mas se o leitor tiver um projeto em condições semelhantes, sugiro 
uma leitura mais completa da documentação, começando com Using Maven When You Can’t Use the 
Conventions. 
É claro que nem tudo é tão simples. Muitos projetos usam estruturas tão diferentes que se exige a 
refatoração desta estrutura. 
Benefícios do Maven 
A adoção do Maven no desenvolvimento traz de imediato os seguintes benefícios: 
Centralização das informações 
O Maven centraliza as informações dos projetos no arquivo pom. 
Sendo assim, não é preciso configurar várias ferramentas, build scripts, servidores e IDEs durante o 
desenvolvimento. O Maven segue o conceito DRY (Don’t Repeat Yourself). 
Além disso, o Maven também disponibiliza formas de analisar o projeto. Por exemplo, 
o goal dependency:analyze exibe as dependências declaradas que não estão sendo usadas e as 
usadas via terceiros, mas não declaradas no pom. 
http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
http://maven.apache.org/guides/mini/guide-using-one-source-directory.html
http://maven.apache.org/guides/mini/guide-using-one-source-directory.html
Padronização do ambiente de desenvolvimento 
Através da especificação do projeto, incluindo suas características e dependências, o Maven constrói a 
estrutura necessária do projeto, baixando automaticamente as versões corretas das dependências 
(JARs, por exemplo) de um repositório central ou de um repositório privado (contendo sistemas da 
empresa). 
Você não precisa entrar no site de cada biblioteca e framework usado e então fazer manualmente o 
download e adicionar os jars no seu classpath. 
Dessa forma, cada desenvolvedor consegue configurar rapidamente um ambiente para 
desenvolvimento com a garantia de que esse ambiente é igual ao dos outros desenvolvedores. 
Gerenciamento de dependências 
Como já mencionei, o Maven faz o download automático de dependências para o projeto e os 
adiciona ao classpath do seu projeto. 
Cada dependência pode ter também as suas próprias dependências. Elas são 
chamadas dependências transitivas. O Maven resolve essa árvore de dependências e traz tudo o 
que você precisa. 
Em alguns casos, pode haver problemas de conflitos, no caso da árvore de dependências incluir 
versões diferentes de um mesmo artefato. O Maven vem com mecanismos para resolver isso. 
Facilidade de compreensão do projeto 
Ao usar a convenção de diretórios sugerida pelo Maven os desenvolvedores terão mais facilidade em 
compreender a estrutura do projeto, afinal todos os projetos seguirão uma estrutura básica de 
diretórios, como vimos anteriormente. 
Automação 
O Maven gerencia o ciclo de vida da aplicação. Após configurar um projeto, você será capaz de 
executar comandos que vão desde a compilação até a geração de documentação (Javadoc) e um site 
padrão contendo informações sobre o projeto. 
Uma vez feita a configuração necessária, o projeto pode ser baixado e compilado sem nenhum 
esforço. Novas versões podem ser geradas em servidores de Integração Contínua e testadas 
automaticamente sempre que necessário. 
Um alerta 
Embora os tópicos anteriores tenham enumerado diversas vantagens do uso do Maven, este não é 
uma "bala de prata", ou seja, uma solução mágica para o projeto. 
Dependendo da complexidade do projeto, pode ser bem complicado criar uma configuração 
adequada para ao Maven. 
Além disso, o Maven não irá livrá-lo de problemas como: 
Incompatibilidade de dependências 
O projeto depende dos frameworks A e B. O framework A depende a versão 1.0 da biblioteca C. O 
framework B depende da versão 2.0 da biblioteca C. 
O Maven não vai resolver sozinho isso, mas facilita muito a resolução do problema já que podemos 
usar as informações do mecanismo de resolução de dependências para identificar os conflitos. 
Algumas tecnologias simplesmente não vão funcionar bem com o Maven 
Alguns autores de frameworks ou arquiteturas inventam o seu próprio jeito de trabalhar. Isso 
significa que para usar o Maven é necessário alguma adaptação, o que nem sempre é trivial. 
No entanto, é possível escrever plugins para o Maven que façam o trabalho para você. Geralmente a 
comunidade de cada framework,se não os próprios autores, já terão resolvido esse problema. 
Embora existam casos em que essas soluções acrescentem novas limitações. 
Ódio do Maven 
A verdade é que existe muita gente que odeia o Maven por ter vivido experiências ruins com ele, 
principalmente no início. Infelizmente, não sei se este artigo terá o poder de curá-lo de traumas 
passados ao tentar usar o Maven sem a devida orientação. 
No entanto, não deixe que isso influencie você neste momento. Mesmo que não pretenda usar o 
Maven em seus projetos, vale a pena conhecê-lo. Você pode ser obrigado a usá-lo na empresa ou 
mesmo num projeto opensource de que vai participar. 
Se você não gosta do Maven, tenha duas coisas em mente: 
1. Existem várias alternativas, desde scripts Ant até outras ferramentas de resolução de 
dependências mais avançadas como o Graddle. 
2. Embora algumas pessoas atinjam um excelente nível de produtividade sem o Maven, se 
considerarmos um contexto mais amplo, como um projeto que com mais de meia dúzia de 
desenvolvedores, alguns deles novatos, o Maven pode trazer mais vantagens que 
desvantagens se bem configurado por um desenvolvedor experiente. 
Instalando o Maven 
Acesse a página do Maven e clique no item Download do menu. 
A página disponibiliza diferentes versões para diferentes ambientes. Baixe o arquivo da última versão 
de acordo com seu sistema operacional. Destaquei na imagem a versão zip para Windows que usarei 
neste exemplo: 
http://www.gradle.org/
http://maven.apache.org/
http://maven.apache.org/download.cgi
 
A versão mais atual do Maven na data de criação deste tutorial é 3.2.1. O pacote baixado é 
nomeado apache-maven-3.2.1-bin.zip. Veja o arquivo aberto no 7-Zip: 
 
Descompacte o conteúdo para a pasta c:\starcode\. 
 
Configura o resultado na imagem a seguir: 
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/011.png
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/021.png
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/031.png
 
Configurando o Maven 
O Maven é configurado através do arquivo settings.xml que fica no 
diretório c:\starcode\apache-maven-3.2.1\conf. 
Abra o arquivo usando um editor avançado, como o Notepad++. Você vai ver que existem diversos 
blocos de XML comentados com possíveis configurações e explicações sobre elas. 
Em um ambiente simples você não vai precisar mexer em muita coisa. Porém, vamos ver alguns 
pontos mais importantes. 
Proxy 
É muito comum precisarmos autenticar o acesso à internet em um Proxy quando estamos no 
trabalho. Procure a tag <proxy>, a qual deve estar comentada no arquivo de configuração. O trecho é 
o seguinte: 
<proxy> 
 <id>optional</id> 
 <active>true</active> 
 <protocol>http</protocol> 
 <username>proxyuser</username> 
 <password>proxypass</password> 
 <host>proxy.host.net</host> 
 <port>80</port> 
 <nonProxyHosts>local.net|some.host.com</nonProxyHosts> 
</proxy> 
Se você tem um proxy na sua rede, mova o bloco acima para fora do comentário, então substitua os 
parâmetros de acordo com seu ambiente. Mantenha a tag <proxy> dentro de <proxies>. 
Veja abaixo um exemplo de uso: 
<proxies> 
 <proxy> 
 <id>proxy</id> 
 <active>true</active> 
 <protocol>http</protocol> 
http://notepad-plus-plus.org/
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/041.png
 <host>proxy.intranet.empresa.com</host> 
 <port>8080</port> 
 <nonProxyHosts>localhost,127.*,192.*</nonProxyHosts> 
 </proxy> 
</proxies> 
Local do repositório 
O Maven utiliza um diretório local para baixar os artefatos da internet. O diretório padrão fica dentro 
pasta do usuário, na pasta .m2. Um exemplo no Windows é c:\users\luiz\.m2\repository. 
Entretanto, tenho o hábito de mudar esse diretório para junto de meus arquivos de desenvolvimento. 
Para isso, basta editar o settings.xml, movendo a tag <localRepository> para fora do 
comentário e adicionando o caminho, por exemplo: 
<localRepository>c:\starcode\apache-maven-3.2.1\repo</localRepository> 
Não se esqueça de criar o diretório especificado caso o mesmo não exista. 
Configurando as variáveis de ambiente 
Para usar o Maven em linha de comando você deve adicionar o caminho para os executáveis 
ao PATH do ambiente. No Windows, pressione Ctrl+Break para abrir a tela de informações do do 
sistema. 
 
Clique na opção Configurações avançadas do sistema, à esquerda da janela. 
 
Na aba Avançado da tela de Propriedades do Sistema, clique em Variáveis de Ambiente.... 
http://proxy.intranet.empresa.com/
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/05-configurar-maven.png
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/06-configurar-maven.png
 
Você pode adicionar a variável de ambiente apenas para o usuário atual ou globalmente para todo o 
sistema. Faça o que for melhor para o seu caso. Alguns ambientes corporativos impedem o acesso à 
configuração de sistema por questões de segurança, então você terá que configurar apenas seu 
usuário. 
Clique em Novo... e crie a variável M2_HOME com o valor apontando para o diretório base do Maven. 
No nosso exemplo o valor é c:\starcode\apache-maven-3.2.1. 
 
Clique em OK para criar a variável. 
 
Agora vamos incluir o diretório com os executáveis do Maven ao PATH. Localize a entrada, selecione-a 
e clique em Editar.... 
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/07-configurar-maven.png
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/08-configurar-maven.png
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/09-configurar-maven.png
 
Adicione ao final um ponto e vírgula e o caminho para a pasta bin do Maven (;%M2_HOME%\bin), 
assim: 
 
Clique em OK para confirmar a edição e OK novamente para confirmar as alterações nas variáveis do 
sistema. 
Vamos então testar a instalação. Abra o CMD (linha de comando) e digite mvn -version. Você deve 
ver algo como na figura abaixo: 
 
Se ocorreu algum problema, verifique se você tem o Java instalado e configurado corretamente, 
incluindo as variáveis de ambiente JAVA_HOME e PATH incluindo o Java. Caso tenha dúvidas, acesse o 
artigo citado no início sobre a instalação do JDK. 
Usando o Maven 
Usando a instalação do Maven no Eclipse 
Para integrar o Maven e Eclipse eu aconselho o plugin M2E. Note que o M2E é um plugin do Eclipse 
que faz integração com o Maven. 
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/10-configurar-maven.png
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/11-configurar-maven.png
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/12-configurar-maven.png
Existe também o Maven Eclipse Plugin, aquele onde se digita eclipse:eclipse para gerar um 
projeto para o Eclipse. Este é um plugin do Maven que simplesmente gera os arquivos de 
configuração necessários para a IDE. Não confunda os dois. 
A distribuição Eclipse for JEE Developers já vem com o plugin M2E e uma instalação interna do 
Maven. Veja como instalar e usar o Eclipse acessando o artigo citado no início. 
Se você tem uma versão diferente do Eclipse, use o menu Help > Eclipse Marketplace..., 
pesquise por M2E e instale o plugin. 
Com o plugin instalado e o Eclipse aberto, acesse o menu Window > Preferences... e vá até a 
opção Maven > Installations. 
 
Veja que já existe uma instalação "embarcada", mas com uma versão desatualizada. Vamos adicionar 
o nosso Maven. 
Clique em Add... e selecione a pasta com a nossa instalação, no caso: c:\starcode\apache-
maven-3.2.1. 
 
Note que ele já encontrou nosso arquivo de configuração. 
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/01-maven-eclipse.png
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/02-maven-eclipse.png
Vá até o menu User Settings. Há um warning lá dizendo que a configuração do usuário não existe. 
Você pode criarum outro settings.xml na pasta indicada ou simplesmente use um artifício (que eu 
sempre uso), que é definir o mesmo arquivo da configuração global. 
 
Caso não tenha entendido, o Maven possui um arquivo de configuração global que afeta diretamente 
a instalação e fica na pasta conf. Entretanto, cada usuário do sistema pode ter um arquivo próprio e 
sobrescrever as configurações globais que ele desejar. No entanto, se você é o único usuário do 
computador, não é necessário ter os dois arquivos. 
Criando um projeto Maven simples no Eclipse 
Com o Maven configurado, vamos criar um novo projeto no Eclipse. Acesse o menu File > New > 
Maven Project. Selecione a opção Create a simple project (skip archetype 
selection) e clique clique em Next >. 
 
Vamos preencher a identificação do projeto, que nada mais é do que a identificação de um artefato. 
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/03-maven-eclipse.png
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/01-projeto-simples.png
 
O Group Id para o exemplo será br.com.starcode e o Artifact Id será teste-maven-01. A 
versão e o tipo de artefato (Packaging) já devem estar preenchidos, então simplesmente deixe como 
está. O nome e a descrição são opcionais. 
Clique em Finish para ver o projeto criado. 
Note que ele ainda não está definido com as configurações de um projeto Java, então clique com o 
botão direito sobre o projeto, acesse o menu Maven > Update Project.... 
 
Clique em OK para atualizar o projeto com as configurações do Maven e agora temos a estrutura 
característica. 
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/02-projeto-simples.png
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/03-projeto-simples.png
 
Adicionando manualmente uma dependência 
Agora vou ilustrar como podemos adicionar algumas dependências ao projeto. Acesse o 
site mvnrepository.com, que contém um índice das dependências disponíveis no repositório do 
Maven. Pesquise por commons-lang. 
 
Selecione o item Apache Commons Lang, como indicado na imagem abaixo: 
http://mvnrepository.com/
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/04-projeto-simples.png
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/05-projeto-simples.png
 
Clique sobre a última versão (3.3.2 na data em que escrevo o artigo). 
 
Selecione e copie a identificação do artefato, conforme a imagem abaixo: 
 
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/06-projeto-simples.png
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/07-projeto-simples.png
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/08-projeto-simples.png
Agora volte ao Eclipse e clique duas vezes sobre o arquivo pom.xml para editá-lo. Provavelmente o 
editor foi aberto no aba Overview (veja abaixo do editor) com diversos campos e informações sobre 
o projeto. 
Clique na aba pom.xml para mostrar o código fonte. 
 
Adicione a tag <dependencies> logo abaixo da tag <description> e cole o conteúdo do site dentro 
dela. 
Dica: Pressione CTRL+A para selecionar todo o conteúdo do arquivo e depois CTRL+I para indentar 
(tabular) o arquivo. 
 
O conteúdo do pom.xml deve ser o seguinte: 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XM
LSchema-instance" 
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/m
aven-4.0.0.xsd"> 
 <modelVersion>4.0.0</modelVersion> 
 <groupId>br.com.starcode</groupId> 
http://maven.apache.org/POM/4.0.0
http://www.w3.org/2001/XMLSchema-instance
http://www.w3.org/2001/XMLSchema-instance
http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd
http://maven.apache.org/xsd/maven-4.0.0.xsd
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/09-projeto-simples.png
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/10-projeto-simples.png
 <artifactId>teste-maven-01</artifactId> 
 <version>0.0.1-SNAPSHOT</version> 
 <name>Teste Maven 01</name> 
 <description>Um teste de projeto simples com o maven</description> 
 <dependencies> 
 <dependency> 
 <groupId>org.apache.commons</groupId> 
 <artifactId>commons-lang3</artifactId> 
 <version>3.3.2</version> 
 </dependency> 
 </dependencies> 
</project> 
Salve o arquivo. O plugin M2E irá identificar a alteração, baixar automaticamente a dependência do 
repositório central para o seu repositório local e adicioná-la ao classpath do projeto. 
Confira a entrada Maven Dependencies na imagem a seguir: 
 
Pronto! Agora você já pode usar qualquer classe da biblioteca Apache Commons Lang. 
Fiz uma classe de exemplo (File > New > Other..., selecione Class), com o seguinte conteúdo: 
package br.com.starcode.testemaven01; 
 
import org.apache.commons.lang3.StringUtils; 
 
public class ClasseDeTeste { 
 
 public static void main(String[] args) { 
 
 System.out.println(StringUtils.capitalize("luiz")); 
 
 } 
 
http://commons.apache.org/proper/commons-lang/
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/11-projeto-simples.png
} 
Executei o método main clicando com o botão direito sobre a classe, menu Run As > Java 
Application. Veja o resultado: 
 
Executando os passos (goals) do Maven 
Vamos supor que estamos construindo uma nova biblioteca. Precisaremos testá-la (test), empacotá-
la (package) num jar e distribuí-la (deploy) para o uso de terceiros, não é mesmo? O Maven nos ajuda 
grandemente com esses passos naturais do ciclo de vida de um projeto. 
Vamos usar nosso projeto de exemplo e criar uma classe utilitária chamada SuperUtil: 
package br.com.starcode.testemaven01; 
 
import org.apache.commons.lang3.StringEscapeUtils; 
 
public class SuperUtil { 
 
 /** 
 * Possibilita exibir um texto contendo HTML no navegador sem ataques XSS. 
 * @param html Entrada do usuário (pode ter HTML, mas não deve ser renderizado, som
ente exibido) 
 * @return Texto sem posíveis tags HTML 
 */ 
 public static String escapeHTML(String html) { 
 return StringEscapeUtils.escapeHtml4(html); 
 } 
 
} 
Veja no Eclipse: 
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/12-projeto-simples.png
 
Vamos ainda criar um teste unitário para nossa classe, as primeiro temos que adicionar a 
dependência do JUnit ao nosso projeto. Para isso vá até o site mvnrepository.com e pesquise 
por junit. Vá até a última versão, copie o trecho do XML e adicione na seção de dependências do 
seu pom.xml. 
Adicione também a tag <scope>test</scope> à esta dependência, para informar ao Maven que ela 
somente será usada no teste. Sim, o Maven é “esperto” e não incluirá, por exemplo, o JUnit na 
pasta WEB-INF/lib de uma aplicação web. 
Veja como ficou o pom.xml: 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XM
LSchema-instance" 
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/m
aven-4.0.0.xsd"> 
 <modelVersion>4.0.0</modelVersion> 
 <groupId>br.com.starcode</groupId> 
 <artifactId>teste-maven-01</artifactId> 
 <version>0.0.1-SNAPSHOT</version> 
 <name>Teste Maven 01</name> 
 <description>Um teste de projeto simples com o maven</description> 
 <dependencies> 
 <dependency> 
 <groupId>org.apache.commons</groupId> 
 <artifactId>commons-lang3</artifactId> 
 <version>3.3.2</version> 
 </dependency> 
 <dependency> 
 <groupId>junit</groupId> 
 <artifactId>junit</artifactId> 
 <version>4.11</version> 
 <scope>test</scope> 
 </dependency> 
 </dependencies> 
</project> 
Ao salvar o arquivo o Maven deve baixar o JUnit automaticamente. 
http://mvnrepository.com/
http://mvnrepository.com/artifact/junit/junit/4.11http://maven.apache.org/POM/4.0.0
http://www.w3.org/2001/XMLSchema-instance
http://www.w3.org/2001/XMLSchema-instance
http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd
http://maven.apache.org/xsd/maven-4.0.0.xsd
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/01-executando-com-maven.png
Agora crie a classe de teste SuperUtilTest em src/test/java: 
package br.com.starcode.testemaven01; 
 
import org.junit.Assert; 
import org.junit.Test; 
 
public class SuperUtilTest { 
 
 @Test 
 public void escapeHTMLTest() { 
 
 String escapedHtml = SuperUtil.escapeHTML("<script>alert(1);</script>"); 
 String expected = "&lt;script&gt;alert(1);&lt;/script&gt;"; 
 Assert.assertEquals(expected, escapedHtml); 
 
 } 
 
} 
Caso queira executar o teste já, clique com o botão direito sobre a classe e acesse o menu Run As > 
JUnit Test: 
 
Confira o resultado: 
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/02-executando-com-maven.png
 
Sucesso! 
Imagine agora que tenhamos criado diversas classes e métodos. Temos uma versão beta de nossa 
biblioteca. 
Vamos testar o projeto usando o Maven. Clique no projeto com o botão direito e na opção Run As > 
Maven test: 
 
Na primeira execução o Maven vai baixar diversos plugins e dependências internas para a execução 
do projeto. Aguarde um pouco e confira o resultado de todos os testes do projeto: 
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/03-executando-com-maven.png
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/04-executando-com-maven.png
 
Ok, agora vamos gerar um JAR do projeto. Clique no projeto com o botão direito e na opção Run As 
> Maven build.... Isso é necessário porque não é uma opção pronta para o passo package. Vá até 
o campo Goals e digite package. 
 
Clique em Run e aguarde. 
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/05-executando-com-maven.png
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/06-executando-com-maven.png
 
Se você observar o log no Console notará que os testes foram executados. Lembra que eu disse que 
os passos anteriores sempre são executados? Espero que agora tenha entendido melhor. 
Note a última linha antes das palavras BUILD SUCCESS. Ali está o caminho do Jar gerado. Ele foi 
gerado dentro da pasta target do projeto. 
Selecione a pasta target e Pressione F5 para atualizá-la. Abra-a clicando na seta à esquerda e 
confira: 
 
Vamos agora executar o install, isto é, instalar o jar no repositório local. Clique no projeto com o 
botão direito e na opção Run As > Maven install. Aguarde um pouco e veja o resultado: 
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/07-executando-com-maven.png
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/08-executando-com-maven.png
 
As duas últimas linhas antes da mensagem de sucesso demonstram os locais onde o Jar e o seu 
arquivo POM foram instalados: 
[INFO] Installing D:\starcode\workspaces\workspace_demo\teste-maven-01\target\teste-maven-01-0.0.1-
SNAPSHOT.jar to c:\starcode\apache-maven-3.2.1\repo\br\com\starcode\teste-maven-01\0.0.1-
SNAPSHOT\teste-maven-01-0.0.1-SNAPSHOT.jar 
[INFO] Installing D:\starcode\workspaces\workspace_demo\teste-maven-01\pom.xml to c:\starcode\apache-
maven-3.2.1\repo\br\com\starcode\teste-maven-01\0.0.1-SNAPSHOT\teste-maven-01-0.0.1-SNAPSHOT.pom 
Vamos abrir o diretório do repositório local e dar uma olhadinha: 
 
Agora você pode usar este artefato em outros projetos na sua máquina local, adicionando a seguinte 
dependência: 
<dependency> 
 <groupId>br.com.starcode</groupId> 
 <artifactId>teste-maven-01</artifactId> 
 <version>0.0.1-SNAPSHOT</version> 
</dependency> 
Qualquer projeto com essa dependência vai usar o nosso jar gerado e, automaticamente, incluir 
também o jar do Apache Commons Lang que definimos em nosso projeto. 
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/09-executando-com-maven.png
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/10-executando-com-maven.png
Analisando as dependências 
Vamos aprender a analisar as dependências de um projeto. 
Abra novamente o seu arquivo pom.xml e vá até a aba Dependency Hierarchy. Você deve estar 
vendo isso: 
 
Abaixo, mais um exemplo de dependências extraído da minha biblioteca T-Rex: 
 
Usando o Maven em linha de comando 
Tudo o que fizemos anteriormente através da IDE pode ser feito via linha de comando. É importante 
entender isso porque quando o projeto for compilado em um servidor de Integração Contínua, por 
exemplo, ele não contará com as facilidades do plugin que usamos. 
Irei ilustrar a seguir a execução do goal install via linha de comando. 
O primeiro passo é abrir o CMD e ir até o diretório do projeto. Então basta digitar o comando maven 
install. 
 
Configura o resultado da execução: 
 
 
https://github.com/utluiz/t-rex
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/01-maven-dependencies.png
http://luizricardo.org/wordpress/wp-content/upload-files/2014/06/maven-dependency-hierarchy.png
Pronto! 
Explicando: nós adicionamos o Maven ao path do sistema, lembra? maven é o nome do executável do 
Maven e install é o goal que você deseja executar. Também há usar o executável mvn, que é 
apenas um atalho para evitar digitar mais caracteres. 
Da mesma forma, poderíamos executar mvn test ou mvn package como fizemos nos tópicos acima 
via menu do Eclipse para ativar os respectivos Goals. 
Um goal muito importante ainda não mencionado é o clean, que serve para limpar todos os arquivos 
gerados da pasta target. Ele é muito importante para limpar eventual “sujeira” de gerações 
anteriores. 
Quando estiver tendo problemas estranhos ou for gerar uma versão "oficial", sempre use comandos 
como mvn clean install ou mvn clean deploy para garantir uma geração "limpa". 
Note que você pode especificar vários goals simultaneamente para o Maven executar. Nos exemplos 
acima, o Maven vai primeiro limpar o projeto e depois executar o install ou o deploy. 
Passando parâmetros para o Maven 
Há ainda situações onde precisamos ajustar a execução do Maven através de parâmetros. 
Por exemplo, em certas ocasiões queremos gerar um jar ou war para testes, porém o build do Maven 
falha porque um teste unitário terminou em erro. 
Para resolver essa situação sem excluir o teste unitário, é possível configurar o Maven para “pular” os 
testes com o seguinte comando: 
mvn -DskipTests clean install 
 
Configura o resultado da execução: 
 
 
O mesmo resultado pode ser obtido no Eclipse clicando com o botão direito sobre o projeto e indo no 
menu Run As > Maven build..., digitando clean install no campo Goals e selecionando a 
opção Skip Tests. 
Distribuindo seu projeto 
Os próximos passos incluiriam disponibilizar o jar para outros desenvolvedores através 
do goal deploy. Em um deploy, o Maven envia seu jar para um Repositório Remoto. Entretanto, isso 
exige várias configurações adicionais e as devidas permissões. 
Disponibilizar seu projeto no repositório central do Maven exige que seu projeto seja opensource e 
que você solicite as permissões necessárias. Caso você queira fazer isso, siga os passos disponíveis 
neste link. 
Já dentro de uma empresa geralmente se configura um servidor para conter um repositório com os 
artefatos da empresa. Existem aplicações gratuitas que podem ser usadas para isso, como 
o Artifactory ou o Nexus. 
As configurações necessárias para o deploy num repositório remoto estão fora do escopo deste 
artigo, mas existem várias referências disponíveis na web. 
https://central.sonatype.org/pages/ossrh-guide.html
https://central.sonatype.org/pages/ossrh-guide.html
http://www.jfrog.com/home/v_artifactory_opensource_overview
http://www.sonatype.org/nexus/
Leitura adicional 
Usar o Maven para desenvolver projetos pessoais é relativamente fácile este artigo cobre o 
necessário para isso. Entretanto, não deixe de estudar o material oficial e, aos poucos, ir entendendo 
os mecanismos do Maven para usá-lo em projetos maiores: 
• Site oficial do Maven 
• Maven in 5 Minutes 
• Maven Getting Started Guide 
Considerações finais 
Usar o Maven pode ser confuso a princípio, mas traz diversos benefícios. 
Em curto prazo ele ajuda você a gerenciar as dependências e organizar seus projetos. 
Em médio prazo você poderá ter um controle muito bom de versões e releases, além de um padrão 
maduro para seus projetos. 
Em longo prazo o Maven possibilitará a Integração Contínua de seus projetos. Será necessário um 
esforço considerável, mas seus projetos serão compilados e testados automaticamente. Com uma 
quantidade de testes adequada para garantir que as funcionalidades existentes continuam 
funcionando e as novas vão funcionar, você pode ter versões sendo geradas todos os dias ou a 
cada commit! 
Nesse ponto, cruzamos com conceitos de TDD, Agile e outros. Mas é exatamente este o motivo pelo 
qual ferramentas de automação como o Maven são importantes. 
Espero que o leitor tenha compreendido seu funcionamento básico e possa evoluir daqui em diante 
para um melhor aproveitamento da automação em benefício da qualidade e da agilidade. 
 
 
 
 
Começando com o Gradle 
 
No artigo onde expliquei o que são Build Tools do Java, comentei sobre algumas ferramentas famosas, como 
é o caso do Ant, Maven e Gradle. Entretanto, não entrei em detalhes sobre o funcionamento delas. 
Sendo assim, neste artigo vou falar um pouco sobre como o Gradle funciona e como podemos usá-lo no 
nosso dia a dia. Bora começar? 
Sobre o Gradle 
Apenas para uma breve introdução, o Gradle trata-se de uma ferramenta de build open source bastante 
poderosa que nos permite configurar arquivos de build por meio da sua DSL (Domain Specific Language) 
baseada na linguagem Groovy. 
http://maven.apache.org/
http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
http://maven.apache.org/guides/getting-started/index.html
https://medium.com/@alex.felipe?source=post_page-----4e96fd12d933--------------------------------
https://medium.com/@alex.felipe?source=post_page-----4e96fd12d933--------------------------------
https://medium.com/@alex.felipe/entenda-o-que-s%C3%A3o-build-tools-do-mundo-java-682a26e38ff2
https://github.com/gradle/gradle
http://groovy-lang.org/
“Então pra eu aprender Gradle eu preciso saber Groovy?” 
Não necessariamente, pois o motivo de escolherem uma linguagem dinâmica para a configuração é 
justamente para evitar a verbosidade da estrutura XML que é muito comum em ferramentas como essa. 
Claro, se você conhecer um pouco de Groovy vai tirar bastante proveito da syntax do código. 
Orientado a tasks 
Além da DSL, a ideia do Gradle é permitir configurações baseando-se em tasks, ou seja, quando queremos 
criar algum novo comportamento durante o build, vamos criar uma task! 
“Legal, mas como posso começar a configuração de build com Gradle?” 
Preparando o ambiente 
Antes de começar a falar da prática, sugiro que instale o Gradle para realizarmos alguns testes para facilitar a 
compreensão. 
Criando o primeiro arquivo de build 
Para darmos início em um projeto Gradle, primeiramente precisamos de um arquivo que tenha a 
extensão .gradle. 
Entretanto, por padrão, o Gradle busca por um arquivo chamado build.gradle, sendo assim, vamos criar 
o arquivo e abrí-lo com um editor. 
Eu costumo usar ou Visual Studio Code ou o IntelliJ (pode ser a versão Communty também) para esses 
testes devido ao syntax highlight. Tenho preferência pelo IntelliJ devivo ao auto complete ser mais 
eficiente. 
Declarando a primeira task 
Dentro do arquivo, vamos escrever o seguinte script: 
https://gradle.org/install/
task minhaPrimeiraTask { 
 print 'Rodando minha primeira task' 
} 
Repare que esse script trata-se de uma task que estamos criando. A ideia dela é de fato realizar um processo 
comum quando temos o primeiro contato, por exemplo, com uma linguagem de programação, ou seja, 
apresentar uma mensagem apenas. 
Portanto, com a nossa task declarada, dentro um terminal ou prompt de comando, vamos rodar o 
comando gradle minhaPrimeiraTask: 
 
 
Veja que nesse primeiro momento, o Gradle apresentou a mensagem Rodando minha primeira task da 
mesma maneira como colocamos no script, mas também, ele iniciou um processo chamado Gradle 
Daemon. O que isso significa? 
Entendendo o Gradle Daemon 
Basicamente, esse daemon trata-se de uma instância da JVM para o Gradle com a finalidade de agilizar a 
execução das tasks. Inclusive, podemos executar novamente a task para comprovar a ideia: 
 
 
Um detalhe bacana das tasks do Gradle é que não são case sensitive, por isso que conseguimos executar a 
task minhaPrimeiraTask escrevendo minhaprimeiratask 
Repare que agora o resultado foi bem diferente: 
• Não apareceu novamente a inicialização da Gradle Daemon, pois agora o daemon está de pé. 
• O tempo de execução foi de aproximadamente 3 para 0 segundos. 
Só que agora você deve estar se perguntando 
https://pt.wikipedia.org/wiki/Daemon_(computa%C3%A7%C3%A3o)
“Então esse processo vai ficar sem parar no meu computador?” 
Exatamente! Caso você queira saber o status dele, basta executar gradle --status: 
 
 
Repare que ele está apresentando 2 instâncias, pois eu já tinha parado a 4508. Caso queira parar a atual, é 
só executar o comando gradle --stop: 
 
 
Em outras palavras, por padrão, todas as vezes que utilizamos o Gradle ele vai executar um Gradle 
Daemon se não existir uma instância disponível. 
Claro, existe a possibilidade de desabilitar essa opção, e para mais detalhes deixo a referência da 
documentação. 
Conhecendo as tasks padrões do Gradle 
Fizemos o primeiro contato com o Gradle, entretanto, é muito comum termos a seguinte dúvida 
considerando o que vimos até agora: 
“Então quer dizer que vou ter que criar todas as tasks para o build?” 
Não necessariamente, pois, como é de se esperar, já existem diversas tasks disponíveis por padrão no Gradle. 
Para visualizá-las podemos executar gradle tasks: 
 
 
Repare que novamente subiu uma instância do Gradle Daemon, pois não tinha uma disponível. 
Observe que o Gradle fez uma lista bem grande de possíveis tasks que podem ser executadas no nosso 
projeto. Vamos entendê-las: 
https://docs.gradle.org/current/userguide/gradle_daemon.html
https://docs.gradle.org/current/userguide/gradle_daemon.html
• Build Setup: tasks para o processo de setup. 
• Help: tasks de ajuda de modo geral. 
De forma resumida, essa listagem apresentou 2 grupos de tasks, como também, a descrição de cada um 
deles. 
Entretanto, por listar todas as tasks possíveis para o nosso projeto, por que a nossa não apareceu? 
Listando todas as tasks, inclusive as nossas 
Como vimos, todas as tasks que foram apresentadas, fazem parte de um grupo e possuem uma descrição, 
certo? 
Em outras palavras, para que vejamos todas as tasks, mesmo que não façam parte de um grupo ou tenham 
uma descrição, basta apenas usar o parâmetro --all: 
 
 
 
Note que a nossa task aparece em um grupo chamado de Other tasks! Isto é, esse é o grupo padrão para 
todas as tasks que não possuem um grupo. 
“Bacana, mas como adicionamos um grupo e uma descrição para deixar a nossa task visível?” 
Adicionando grupo e descrição nas tasks 
Basicamente, precisamos adicionar o seguinte conteúdo no corpo da nossa task: 
task minhaPrimeiraTask { 
 group 'tasks pessoais' 
 description 'testes de primeiro contato com o Gradle' 
 print 'Rodando minha primeira task' 
} 
Então, após salvar o build.gradle, ao executar novamente a task tasks: 
 
 
 
Repare que agora aparece o nosso grupo Tasks pessoais, como também, a nossa task com a descrição que 
criamos! 
Muito bom! Aprendemos um pouco sobre tasks do Gradle, mas até o momento, não fomos capazes de criar 
um build que nos permita desenvolver um projetoem Java, certo? 
Em outras palavras, agora que entendemos o mínimo de como podemos criar uma task e como podemos 
visualizar todas as tasks disponíveis do projeto, daremos início num processo de build para construir uma 
aplicação Java. 
Criando um projeto Gradle inicial 
Como vimos, nas tasks disponíveis, temos a task init do grupo Build Setup que indica uma inicialização 
de um novo build do Gradle. 
De fato a ideia dessa task é permitir a criação de um projeto Gradle inicial com arquivos comuns. 
Portanto, antes de executar essa task, vamos criar um diretório para representar um projeto base que 
usaremos como exemplo. 
Nesse caso vou colocar o nome de ceep, pois trata-se de um projeto que estou usando como base para outros 
artigos que venho escrevendo de Kotlin 😅 
Então, dentro do diretório vamos executar o comando gradle init: 
 
 
 
A princípio, parece que não aconteceu nada demais, né? Entretanto, veja que o Gradle apresentou a 
mensagem 2 actionable tasks: 2 executed, isso significa que o Gradle executou duas tasks ao chamar a 
task init e podemos ver o resultado verificando a estrutura do diretório: 
 
 
 
 
Repare que além do build.gradle foram gerados outros arquivos e um diretório: 
https://medium.com/collabcode/criando-sua-primeira-aplica%C3%A7%C3%A3o-android-com-kotlin-695bb476d40b
https://medium.com/collabcode/criando-sua-primeira-aplica%C3%A7%C3%A3o-android-com-kotlin-695bb476d40b
• gradle: diretório que contém os arquivos do Gradle wrapper. 
• gradlew: Gradle wrapper para sistemas baseados em Unix (Linux). 
• gradlew.bat: Gradle wrapper para Windows. 
• settings.gradle: configurações do projeto. 
Como a ideia do artigo é apenas uma breve introdução, não daremos tanta atenção nos demais arquivos, ou 
seja, vamos verificar o conteúdo que foi gerado no arquivo build.gradle: 
Note que ele apresenta um comentário bem grande dando instruções de como podemos criar um sample de 
um projeto Java. De fato, se seguirmos as sugestões do Gradle, daremos o nosso primeiro passo no build de 
um projeto Java. 
Entretanto, repare que essa abordagem não parece tão objetiva, pois o Gradle criou um projeto inicial e 
ainda precisamos realizar mais configurações… 
Isso acontece, pois a task init, por padrão, assume um tipo de projeto conhecido como basic que o próprio 
nome já diz o que ele faz, isto é, gera um projeto básico. 
É justamente por esse motivo que o Gradle não gerou um projeto Java como esperado. 
Definindo o tipo do projeto como aplicação Java na inicialização 
Além do tipo basic, o Gradle nos fornece outros tipos de projetos, dentre eles temos o java-
application que tem o objetivo de gerar um projeto de uma aplicação Java, logo, vamos criar novamente o 
nosso projeto com a task init utilizando esse tipo. 
Entretanto, para que isso seja possível no mesmo diretório, precisamos remover tanto o arquivo os 
arquivos build.gradle e settings.gradle, pois eles são utilizados como base para indicar que existe um 
projeto do Gradle, ou seja, se eles estiverem presentes, a task init não cria um projeto novo. 
https://docs.gradle.org/current/userguide/build_init_plugin.html#sec:build_init_types
Após a remoção, execute o comando gradle init --type java-application: 
 
 
Observe que novamente duas tasks foram acionadas, porém, apenas uma delas foi executada e a outra está 
indicando que foi atualizada (up-to-date). 
“O que isso significa?” 
Uma breve introdução à construção incremental 
Uma das grandes vantagens ao utilizar o Gradle, é justamente a ideia do incremental build, isto é, o Gradle 
“não executa tasks que já foram executada”. 
Lembra que quando executamos a tasks init pela primeira vez, foram executadas 2 tasks? Uma dessas 
tasks era responsável em gerar os arquivos de wrapper, porém, não removemos nenhum deles. 
Justamente por esse motivo, o Gradle não viu a necessidade de executar essa task! Incrível, né? 
Esse é um assunto que pode levar bastante tempo, por isso não vou me aprofundar, porém, se tiver alguma 
dúvida, fique à vontade em perguntar. 
Entendendo os arquivos gerados para aplicação Java 
Legal, vamos verificar o que foi gerado em um projeto do tipo java-application: 
 
 
Repare que agora, além dos arquivos do Gradle que vimos anteriormente, temos também o 
diretório src (também conhecido como source set) que contém uma estrutura bem similar ao padrão que 
vemos em projetos Maven: 
• main/java: código fonte para desenvolvimento. 
• test/java: código fonte para testes. 
https://guides.gradle.org/performance/
Inclusive, o Gradle já gerou alguns arquivos Java pra gente, vamos dar uma olhada em cada um deles: 
Veja que trata-se de classes de exemplo para testarmos o nosso projeto. Aproveitando vamos dar uma olhada 
no conteúdo que foi gerado do arquivo build.gradle: 
Veja que dessa vez, além dos comentários, o Gradle já adicionou alguns plugins, repositórios, dependências e 
definiu uma main class… 
Em outras palavras, o próprio Gradle já fez toda a estrutura que é comum em um projeto Java pra gente! 
Portanto, o que nos resta é apenas testar e verificar o comportamento desse projeto. Mas como podemos 
fazer isso? 
Verificando as tasks do projeto Java 
Agora que estamos nesse projeto com toda essa configuração, vamos verificar as tasks disponíveis para ele: 
 
 
 
Wow! Olha o tanto de tasks que temos disponíveis com a configuração do nosso projeto atual. Isso significa 
que temos diversas ações que podemos aplicar nesse projeto. 
Rodando o projeto 
A primeira delas é justamente a run que indica a execução do projeto, vamos rodá-la e ver o que acontece: 
 
 
Inicialmente o Gradle verificou que eu não tinha a dependência do Guava e por isso a baixou primeiro. 
Depois de finalizar o download e realizar outras tasks (como a de compilação), ela executou a task run, que 
por sua vez, executou a classe App, justamente por esse motivo do download (internet boa… Sacomé 😁) que 
o processo num todo demorou aproximadamente 17 segundos. 
Sendo assim, vamos verificar o que acontece ao executar a task run novamente: 
 
 
Bem mais rápido, né? Mais incrível ainda, é quando verificamos a estrutura de arquivos do nosso projeto: 
 
 
Veja que agora surgiu o diretório build que mantém de todos os arquivos compilados, ou seja, para que a 
classe App fosse executada, foi necessário criar o .class dela e o Gradle já fez tudo isso pra gente! 
Para saber mais 
Vimos bastante conteúdo sobre o que é o Gradle e como podemos utilizá-lo de maneira inicial usando apenas 
o command line. 
Entretanto, a ideia do Gradle não é fazer com que a gente desenvolva aplicações em editores quaisquer e 
realizando o processo de build via command line. 
Ou seja, com esse projeto gerado, o próximo passo é importá-lo em uma IDE que dê suporte ao Gradle, como 
é o caso do IntelliJ IDEA que já vem com o plugin do Gradle instalado. 
É possível também usar no Eclipse e no NetBeans, porém, vai precisar baixar o plugin a 
parte. 
Dessa forma, ao invés do projeto ser gerenciado por uma IDE, ele é gerenciado pelo Gradle fortalecendo a 
ideia de compatibilidade independentemente da IDE. 
Conclusão 
Neste artigo tivemos o nosso primeiro contato com o Gradle e aprendemos das features e peculiaridades da 
ferramenta, como por exemplo, como começar um build, a instância do Gradle Daemon, execução de tasks, 
listagem de tasks e a criação de um projeto para dar suporte a aplicações Java. 
 
 
Usando cmake para compilar c/c++ 
Como usar o cmake para compilar projetos em c/c++ 
 
CMake — Cross-Platform Makefile Generator 
O que é o cmake 
O CMake é um "Cross-Platform Makefile Generator" ou uma ferramenta open-source que permite gerar 
automaticamente scripts de construção de aplicação em diferentes plataformas, como por exemplo "Unix 
Makefiles, Xcode, Visual Studio, CodeBlocks etc …", uma lista completa pode ser encontrada aqui. 
Instalando o cmake 
Para instalar o cmake abra o terminal e siga as instruções abaixo.# For Ubuntu 
$ sudo apt-get install cmake# For Redhat 
$ yum install cmake# For Mac OS X with brew 
$ brew install cmake 
Criando um hello world em cpp 
Para facilitar nosso exemplo vamos criar um pequeno hello world em cpp e gerar o build com o cmake. 
Criando um diretório para o projeto. 
• $ mkdir sampleCmake 
• $ cd sampleCmake 
• $ vi main.cpp 
Dentro do arquivo main.cpp coloque o conteúdo abaixo. 
#include <iostream> 
 
using namespace std; 
 
int main(void) { 
 
https://cmake.org/cmake/help/v2.8.10/cmake.html#gen:BorlandMakefiles
 cout << "Hello World" << endl; 
 
 return(0); 
 
} 
Agora temos que criar o nosso CMakeLists.txt que será o roteiro usado pelo cmake para criar os scripts de 
compilação da aplicação. dentro do CMakeLists.txt coloque o conteúdo listado abaixo. 
cmake_minimum_required(VERSION 2.8) 
project(sampleCmake) 
add_executable(hello main.cpp) 
Uma vez criado os arquivos do nosso projeto vamos testar para saber se está tudo funcionando como 
planejado para isso siga as instruções abaixo. 
$ mkdir build && cd build 
$ cmake ../ 
$ make 
$ ./hello 
Nos criamos um diretório aparte para compilar o projeto convencionalmente chamado de build e depois 
executamos o cmake ../ mas informações para que ele procure o CMakeLists.txt no diretório anterior. Uma 
vez que encontre o CMakeLists.txt o cmake começa a construção dos scripts de compilação necessários no 
caso do exemplo acima um Makefile. Terminado a construção sem erros temos um arquivo Makefile pronto 
para compilação nesse caso é só executar um "make" para compilar e depois executar o binário "./hello". 
Melhorando um pouco nosso projeto. 
Agora digamos que eu queira controlar a versão do meu binário, com o cmake também podemos fazer essa 
tarefa de forma simples segue abaixo algumas alterações que teremos que fazer no nosso projeto. 
Altere o arquivo CMakeLists.txt conforme abaixo : 
cmake_minimum_required(VERSION 2.8) 
project(sampleCmake)set (Sample_VERSION_MAJOR 0) 
set (Sample_VERSION_MINOR 0) 
set (Sample_VERSION_PATCH 1)configure_file( 
 "${PROJECT_SOURCE_DIR}/SampleConfig.h.in" 
 "${PROJECT_BINARY_DIR}/SampleConfig.h" 
 )include_directories("${PROJECT_BINARY_DIR}")add_executable(hello main.cpp) 
Crie o arquivo chamado "SampleConfig.h.in" com o conteúdo listado abaixo. 
#define SAMPLE_VERSION_MAJOR @Sample_VERSION_MAJOR@ 
#define SAMPLE_VERSION_MINOR @Sample_VERSION_MINOR@ 
#define SAMPLE_VERSION_PATCH @Sample_VERSION_PATCH@ 
Agora altere o arquivo main.cpp para ficar como o conteúdo listado abaixo. 
#include <iostream> 
#include "SampleConfig.h"void version() 
{ 
 std::cout << "Version : " << SAMPLE_VERSION_MAJOR << 
 "." << SAMPLE_VERSION_MINOR << 
 "." << SAMPLE_VERSION_PATCH << std::endl; 
}int 
main(void) 
{ 
 version(); 
 std::cout << "Hello World by CMake !!!" << std::endl; 
 return(0); 
} 
Uma vez feitas estas alterações compile novamente o projeto usando o cmake conforme descrito 
anteriormente. 
$ rm -rf build 
$ mkdir build && cd build 
$ cmake ../ 
$ make 
$ ./hello 
Version : 0.0.1 
Hello World by CMake !!! 
O resultado deve ser uma saída como mostrado acima. Com o cmake podemos fazer muito mais no próximo 
artigo vou mostrar como usar o cmake para compilar um projeto usando biblioteca de terceiros como a 
libcurl. 
 
 
PERGUNTA 1 
Questão referente a: 
• Texto-base 1 - Instalando, configurando e usando o Maven para gerenciar suas dependências e seus 
projetos Java 
• Texto-base 2: Começando com o Gradle 
• Texto-base 3: Usando CMake para compilar c/c++ 
Qual(is) das ferramentas de automação de compilação apresentadas usa(m) como base um arquivo escrito 
em linguagem específica de domínio (DSL)? 
o Maven e Gradle. 
 
o Gradle. 
o CMake. 
o Maven. 
o Gradle, Maven e CMake. 
 
Você acertou! Essa é a alternativa correta. Apenas Gradle usa como base um arquivo escrito em linguagem 
específica de domínio (DSL), baseada em Groovy. 
http://twitter.com/Sample_VERSION_MAJOR
http://twitter.com/Sample_VERSION_MINOR
http://twitter.com/Sample_VERSION_PATCH
ATIV IDADE AVALIATIVA 
 
PERGUNTA 1 
Para que é usado o método fail() do JUnit? 
o Para fazer com que o teste seja depurado. 
o Para fazer com que o testador busque o erro. 
o Para fazer com que o erro seja encontrado. 
o Para fazer com que o programador seja penalizado. 
o Para fazer com que o teste falhe. 
 
PERGUNTA 2 
Marque a alternativa que apresenta apenas anotações existentes no JUnit 4.x para serem usados em classes de 
teste: 
o @After, @AfterClass, @Before, @BeforeClass, @Test. 
 
o @AfterClass, @Before, @BeforeClass, @During, @Test. 
o @After, @AfterClass, @BeforeClass, @During, @Test. 
 
o @After, @Before, @BeforeClass, @During, @Test. 
 
o @After, @AfterClass, @Before, @BeforeClass, @During. 
 
PERGUNTA 3 
Qual alternativa apresenta a ordem correta dos itens usados para definir exemplos concretos de comportamento 
seguindo BDD? 
o Dado > Cenário > Então > Quando. 
o Cenário > Dado > Então > Quando. 
o Cenário > Quando > Dado > Então. 
o Cenário > Dado > Quando > Então. 
o Dado > Cenário > Quando > Então. 
 
PERGUNTA 4 
Marque a alternativa que apresenta um exemplo de comando da ferramenta Selenium IDE: 
o ClickAndGo. 
o WaitAndType. 
o WaitTo. 
o Assert. 
o Validate. 
 
PERGUNTA 5 
Qual alternativa abaixo apresenta uma característica correta da ferramenta Selenium IDE? 
o Pode exportar para scripts do WebDriver. 
 
o Pode fornecer um relatório de teste detalhado. 
o Permite editar os scripts pré-gravados. 
o Pode realizar testes de banco de dados. 
o Suporta testes orientados a dados.

Mais conteúdos dessa disciplina