SlideShare une entreprise Scribd logo
1  sur  33
Télécharger pour lire hors ligne
Automação no ambiente
de desenvolvimento com
     Maven e ANT
        Responsável: Thiago Moretto
    Co-responsável: João Bosco Monteiro

  Workshop de Nivelamento Interno
         GPEC/Tecsinapse
                              Versão: 1.0 23/Abr/07
Workshop GPEC/Tecsinapse

Roteiro
 
     Introdução
 
     ANT
 
     Maven
 
     Vantagens e desvantagens
 
     Modelo de desenvolvimento
 
     Visão geral
 
     Uso da ferramenta
 
     Funcionamento
 
     Testes unitários
 
     Outras características
 
     Conclusão
Workshop GPEC/Tecsinapse

Introdução

 Ferramentas como o ANT e Maven
 desempenham papéis fundamentais em
 qualquer ambiente de desenvolvimento.

 
     Automação
 
     Padronização
 
     Integração
 
     Colaboração
 
     Distribuição
Workshop GPEC/Tecsinapse

ANT

 Ferramenta versátil de construção que
 automatiza processo de compilação,
 empacotamento e distribuição de um
 projeto.
Workshop GPEC/Tecsinapse

Visão geral do ANT
Workshop GPEC/Tecsinapse

Exemplo de um buildfile

 <project name=quot;MeuProjetoquot; default=quot;compilequot; basedir=quot;.quot;>
   <target name=quot;initquot;>
       <property name=quot;srcquot; value=quot;srcquot;/>
       <property name=quot;distquot; value=quot;classesquot;/>
   </target>
    <target name=quot;cleanquot; depends=quot;initquot;>
      <deltree dir=quot;${dist}quot;/>
    </target>
    <target name=quot;preparequot; depends=“cleanquot;>
      <mkdir dir=quot;${dist}quot;/>
    </target>
   <target name=quot;compilequot; depends=quot;init, clean, preparequot;>
       <javac srcdir=quot;${src}quot; destdir=quot;${dist}quot;/>
   </target>
 </project>
Workshop GPEC/Tecsinapse

O que é Maven?

                           ANT != Maven

 O Maven oferece uma infra-estrutura de
 administração de projetos, desde a
 compilação,    a      distribuição,  a
 documentação até a colaboração.

 Baseado no conceito de POM
 (Project Object Model), arquivo pom.xml
Workshop GPEC/Tecsinapse

Vantagens do Maven

 
   Aumento de produtividade
 
   Melhor gestão do projeto
 
   Padronização de estrutura
 
   Automatização das dependências
 
    Baseado em plugins. Fácil extensão das
   funcionalidades
 
   Automatiza teste unitários com JUnit
Workshop GPEC/Tecsinapse

Desvantages do Maven

 
   Menor versatilidade do que o ANT. Mas
 são ferramentas bem diferentes!
 
   Curva de aprendizado considerável
 
   Maior complexidade na configuração do
 ambiente
Workshop GPEC/Tecsinapse

Modelo de desenvolvimento do Maven

 
   Um processo de construção fácil e
 uniforme.
 
    Fornece informações do projeto com
 qualidade.
 
   Estimula boas práticas no
 desenvolvimento.
 
   Facilita a colaboração e resolve as
 dependências.
Workshop GPEC/Tecsinapse

Visão geral do Maven




    Fonte: Maven 2 e Continuum: Automatizando o seu ambiente de desenvolvimento
    (Palestra JustJava 2006); Dário Luís Oliveros e José Marcelo Santuci
Workshop GPEC/Tecsinapse

Visão geral do repositório Maven




    Fonte: Maven 2 e Continuum: Automatizando o seu ambiente de desenvolvimento
    (Palestra JustJava 2006); Dário Luís Oliveros e José Marcelo Santuci
Workshop GPEC/Tecsinapse

Grupo e artefato

 Grupo e artefato são formas genéricas de
 representar e organizar projetos.

 O grupo (groupID) é uma forma de
 organizar os projetos (por exemplo, os
 projetos do GPEC).

 Um artefato (artifactId) é um identificador
 do projeto, ou parte dele (módulo).
Workshop GPEC/Tecsinapse

Instalação

 Já esta instalado neste laboratório.
 $ mvn -version

 Mas para instalar, baixe do site:
 http://maven.apache.org/

 Descompacte e coloque o caminho do diretório
 bin/ do Maven no $PATH da máquina.
Workshop GPEC/Tecsinapse

Configuração do proxy

 Crie o arquivo ~/.m2/settings.xml

 <settings>
  <proxies>
   <proxy>
   <active>true</active>
   <protocol>http</protocol>
   <host>proxy.acad.ucdb.br</host>
   <port>3128</port>
   <nonProxyHosts>localhost|127.0.0.1</nonProxyHosts>
   </proxy>
  </proxies>
 </settings>
Workshop GPEC/Tecsinapse

Uso

 Uso:
 $ mvn [ fase ] ...
 Uma fase contém vários plugins em ação.
 Ou:
 $ mvn plugin:função

 Exemplo, criando nova estrutura:
 $ mvn archetype:create 
    -DgroupId=br.ucdb.gpec 
    -DartifactId=teste1
Workshop GPEC/Tecsinapse

Estrutura padrão de diretórios

 /
 /pom.xml Arquivo de definição do projeto
 /src/
 /src/main/java/...
 /src/main/resources/...
 /src/test/java/...

 ...

 /target/ (Destino de todas as saídas...)
Workshop GPEC/Tecsinapse

Arquivo POM mínimo

 <project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>br.ucdb.gpec</groupId>
  <artifactId>teste1</artifactId>
  <packaging>jar</packaging>
  <version>1.0</version>
  <name>teste1</name>
   ...
   ...
 </project>
Workshop GPEC/Tecsinapse

Compilação, empacotamento e montagem

 Compilando:
 $ mvn compiler:compile

 Empacotando:
 $ mvn package

 Montando:
 $ mvn assembly:assembly
  Necessário configurar.
Workshop GPEC/Tecsinapse

Artefato e repositório

 Instala no repositório local:
 $ mvn install

 A partir deste momento, se o repositório for
 compartilhado, o projeto já estará disponível
 para todos.

 Publica em algum repositório remoto definido
 no arquivo pom.xml.
 $ mvn deploy
Workshop GPEC/Tecsinapse

Publicando em um repositório

   <distributionManagement>
   <repository>
    <id>repo</id>
    <name>GPEC/Tecsinapse</name>
    <url>scp://repositorio.intranet/repo/</url>
   </repository>
   </distributionManagement>

 No arquivo ~/.m2/settings.xml é necessário
 configurar usuario e senha ou chave pública neste
 caso!
Workshop GPEC/Tecsinapse

Dependências

   <dependencies>
   ...
   <dependency>
       <groupId>org.hibernate</groupId>
       <artifactId>hibernate</artifactId>
       <version>3.2.0.ga</version>
    </dependency>
     ...
   </dependencies>
Workshop GPEC/Tecsinapse

Dependências

 As dependências são resolvidas tentando
 encontrar o artefado em qualquer um dos
 repositórios configurados, caso não seja
 possível encontrar tal artefato, o Maven pede
 que este seja instalado manualmente no
 repositório local.

 $ mvn install:install-file -DgroupId=exemplo 
   -DartifactId=xyz -Dversion=1.0 
   -Dpackaging=jar -Dfile=/tmp/xyz.jar
Workshop GPEC/Tecsinapse

Dependências




 Dependências transitivas são incluídas
 automaticamente.
Workshop GPEC/Tecsinapse

Dependências

 É possível instalar um artefato manualmente
 em um repositório remoto.

 $ mvn deploy:deploy-file
   -Dfile=...
   -DrepositoryId=repositorio.intranet
   -Durl=scp://...
Workshop GPEC/Tecsinapse

Geração do site com documentação e relatórios

 Gera o site e o publica em um servidor Web.
 $ mvn site
 $ mvn site:site-deploy

 Java cross-reference, estilo Javadoc porém
 utilizando os arquivos fontes.
 $ mvn jxr:jxr

 Javadoc:
 $ mvn javadoc:javadoc
Workshop GPEC/Tecsinapse

Parceria Maven e ANT

 Saudades do ANT?
 $ mvn ant:ant

 Caso houve modificações nas dependências,
 faça:
 $ mvn ant:clean ant:ant
Workshop GPEC/Tecsinapse

Integração com o Eclipse

 Habilita o projeto e cria o classpath no Eclipse,
 agora é só importá-lo na ferramenta.
 $ mvn eclipse:eclipse
 $ mvn -Declipse.workspace=... eclipse:add-maven-repo


 Se houver mudanças nas dependências, feche o
 projeto dentro do Eclipse e execute:
 $ mvn eclipse:clean
 $ mvn eclipse:eclipse
 $ mvn -Declipse.workspace=... eclipse:add-maven-repo
Workshop GPEC/Tecsinapse

Configuração do Eclipse

 Em Preferences > Java > Build Path >
 Classpath Variables crie a variável M2_REPO
 com o caminho de seu repositório. Neste caso
 digite ~/.m2/repository/

 A partir deste momento o seu build path no
 Eclipse deve estar correto.
Workshop GPEC/Tecsinapse

Configuração do Eclipse

 Para executar o Maven dentro do Eclipse vá em
 Run > External Tool > External Tools...

 Crie um novo Program. Em Location, localize o
 binário do Maven. Em Working Directory
 coloque: ${project_loc}

 Em Arguments, os argumentos para o Maven.
 Exemplo: package
Workshop GPEC/Tecsinapse

Testes unitários

 
   O Maven já tem suporte ao Junit.
 
   Por padrão, um projeto só pode ser
 publicado em um repositório caso passe em
 todos os seus testes unitários.
 
   Na pasta src/test/java é onde ficam os seus
 testes unitários, deve respeitar um padrão de
 nome para serem executados
 automaticamente.
Workshop GPEC/Tecsinapse

Outras características

 
   Integração com outras IDE's (Netbeans,
 IDEA...)
 
   Integração com SCM (Subversion, CVS, ...)
 
   Agrega o ANT.
 
   Vários plugins podem ser encontrados pela
 Internet.
 
   Suporte à herança e agregação de projetos.
 
   Entre outras...
Workshop GPEC/Tecsinapse

Referências bibliográficas

 ANT:
 http://ant.apache.org/


 Better Build with Maven 2:
 http://www.mergere.com/m2book_download.jsp


 Site do Maven:
 http://maven.apache.org/

 Automatizando seus projetos com o Maven 2
 http://pbjug.org/jugs/documentos/maven_2

Contenu connexe

Tendances

Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlDiego Tremper
 
Testes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e DjangoTestes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e Djangofabiocerqueira
 
Minicurso Play Framework - Tão fácil que nem parece Java
Minicurso Play Framework - Tão fácil que nem parece JavaMinicurso Play Framework - Tão fácil que nem parece Java
Minicurso Play Framework - Tão fácil que nem parece JavaWandesson Soares
 
Aprendendo Angular com a CLI
Aprendendo Angular com a CLIAprendendo Angular com a CLI
Aprendendo Angular com a CLIVanessa Me Tonini
 
Desenvolvendo com Angular CLI
Desenvolvendo com Angular CLIDesenvolvendo com Angular CLI
Desenvolvendo com Angular CLIVanessa Me Tonini
 
Xdebug seus problemas acabaram - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017Vitor Mattos
 
Tdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalTdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalAdriano Petrich
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de softwarericardophp
 
Gerenciamento de Configurações - Puppet
Gerenciamento de Configurações - PuppetGerenciamento de Configurações - Puppet
Gerenciamento de Configurações - PuppetRoberto Scudeller
 
Vagrant uma ferramenta realmente útil e versátil
Vagrant   uma ferramenta realmente útil e versátilVagrant   uma ferramenta realmente útil e versátil
Vagrant uma ferramenta realmente útil e versátilWanderlei Silva do Carmo
 

Tendances (20)

Aula maven
Aula   mavenAula   maven
Aula maven
 
Grails
GrailsGrails
Grails
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControl
 
Maven na prática
Maven na práticaMaven na prática
Maven na prática
 
Introdução ao maven
Introdução ao mavenIntrodução ao maven
Introdução ao maven
 
Maven - Aula 05
Maven - Aula 05Maven - Aula 05
Maven - Aula 05
 
Testes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e DjangoTestes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e Django
 
Maven - Aula 04
Maven  - Aula 04Maven  - Aula 04
Maven - Aula 04
 
Consegi 2011: Puppet
Consegi 2011: PuppetConsegi 2011: Puppet
Consegi 2011: Puppet
 
Minicurso Play Framework - Tão fácil que nem parece Java
Minicurso Play Framework - Tão fácil que nem parece JavaMinicurso Play Framework - Tão fácil que nem parece Java
Minicurso Play Framework - Tão fácil que nem parece Java
 
Aprendendo Angular com a CLI
Aprendendo Angular com a CLIAprendendo Angular com a CLI
Aprendendo Angular com a CLI
 
Desenvolvendo com Angular CLI
Desenvolvendo com Angular CLIDesenvolvendo com Angular CLI
Desenvolvendo com Angular CLI
 
Xdebug seus problemas acabaram - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017
 
Tdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalTdd em django sem desculpas versao final
Tdd em django sem desculpas versao final
 
Maven - Aula 02
Maven - Aula 02Maven - Aula 02
Maven - Aula 02
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de software
 
Precisamos falar sobre Gradle
Precisamos falar sobre GradlePrecisamos falar sobre Gradle
Precisamos falar sobre Gradle
 
Maven - Aula 03
Maven - Aula 03Maven - Aula 03
Maven - Aula 03
 
Gerenciamento de Configurações - Puppet
Gerenciamento de Configurações - PuppetGerenciamento de Configurações - Puppet
Gerenciamento de Configurações - Puppet
 
Vagrant uma ferramenta realmente útil e versátil
Vagrant   uma ferramenta realmente útil e versátilVagrant   uma ferramenta realmente útil e versátil
Vagrant uma ferramenta realmente útil e versátil
 

Similaire à Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANT

Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Frameworkelliando dias
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlManuel Lemos
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitDiego Tremper
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Daniel Makiyama
 
Organizandoacasa 120316203302-phpapp02
Organizandoacasa 120316203302-phpapp02Organizandoacasa 120316203302-phpapp02
Organizandoacasa 120316203302-phpapp02Fernanda Prezotto
 
Projetos Java com Maven
Projetos Java com MavenProjetos Java com Maven
Projetos Java com MavenEdgar Dantas
 
Conhecendo o NuGet e utilizando com ASP.NET MVC
Conhecendo o NuGet e utilizando com ASP.NET MVCConhecendo o NuGet e utilizando com ASP.NET MVC
Conhecendo o NuGet e utilizando com ASP.NET MVCFabrício Lopes Sanchez
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformanceFelipe Ribeiro
 
Integração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlIntegração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlDiego Tremper
 
Puppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGilPuppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGiljefesrodrigues
 
Testes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosDiego Santos
 
Depurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSSDepurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSSThiago Rodrigues
 
TDD em django sem desculpas versao fisl
TDD em django sem desculpas versao fislTDD em django sem desculpas versao fisl
TDD em django sem desculpas versao fislAdriano Petrich
 
Boas práticas de django
Boas práticas de djangoBoas práticas de django
Boas práticas de djangoFilipe Ximenes
 
Desenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes UnitáriosDesenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes UnitáriosVitor Silva
 

Similaire à Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANT (20)

Zend Framework
Zend FrameworkZend Framework
Zend Framework
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Framework
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControl
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnit
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
 
Organizando a casa
Organizando a casaOrganizando a casa
Organizando a casa
 
Organizandoacasa 120316203302-phpapp02
Organizandoacasa 120316203302-phpapp02Organizandoacasa 120316203302-phpapp02
Organizandoacasa 120316203302-phpapp02
 
Projetos Java com Maven
Projetos Java com MavenProjetos Java com Maven
Projetos Java com Maven
 
Conhecendo o NuGet e utilizando com ASP.NET MVC
Conhecendo o NuGet e utilizando com ASP.NET MVCConhecendo o NuGet e utilizando com ASP.NET MVC
Conhecendo o NuGet e utilizando com ASP.NET MVC
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta Performance
 
DevOps Primeiros Passos
DevOps Primeiros PassosDevOps Primeiros Passos
DevOps Primeiros Passos
 
Integração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlIntegração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControl
 
Puppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGilPuppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGil
 
Testes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizados
 
Apresentando o CakePHP
Apresentando o CakePHPApresentando o CakePHP
Apresentando o CakePHP
 
Depurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSSDepurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSS
 
TDD em django sem desculpas versao fisl
TDD em django sem desculpas versao fislTDD em django sem desculpas versao fisl
TDD em django sem desculpas versao fisl
 
Gwt-Guice_TDC2009
Gwt-Guice_TDC2009Gwt-Guice_TDC2009
Gwt-Guice_TDC2009
 
Boas práticas de django
Boas práticas de djangoBoas práticas de django
Boas práticas de django
 
Desenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes UnitáriosDesenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes Unitários
 

Plus de elliando dias

Clojurescript slides
Clojurescript slidesClojurescript slides
Clojurescript slideselliando dias
 
Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScriptelliando dias
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structureselliando dias
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de containerelliando dias
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agilityelliando dias
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Librarieselliando dias
 
How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!elliando dias
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Webelliando dias
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduinoelliando dias
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorceryelliando dias
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Designelliando dias
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makeselliando dias
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.elliando dias
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebookelliando dias
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Studyelliando dias
 

Plus de elliando dias (20)

Clojurescript slides
Clojurescript slidesClojurescript slides
Clojurescript slides
 
Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScript
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structures
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de container
 
Geometria Projetiva
Geometria ProjetivaGeometria Projetiva
Geometria Projetiva
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agility
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Libraries
 
How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!
 
Ragel talk
Ragel talkRagel talk
Ragel talk
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Web
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
 
Minicurso arduino
Minicurso arduinoMinicurso arduino
Minicurso arduino
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorcery
 
Rango
RangoRango
Rango
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Design
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makes
 
Hadoop + Clojure
Hadoop + ClojureHadoop + Clojure
Hadoop + Clojure
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebook
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Study
 

Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANT

  • 1. Automação no ambiente de desenvolvimento com Maven e ANT Responsável: Thiago Moretto Co-responsável: João Bosco Monteiro Workshop de Nivelamento Interno GPEC/Tecsinapse Versão: 1.0 23/Abr/07
  • 2. Workshop GPEC/Tecsinapse Roteiro  Introdução  ANT  Maven  Vantagens e desvantagens  Modelo de desenvolvimento  Visão geral  Uso da ferramenta  Funcionamento  Testes unitários  Outras características  Conclusão
  • 3. Workshop GPEC/Tecsinapse Introdução Ferramentas como o ANT e Maven desempenham papéis fundamentais em qualquer ambiente de desenvolvimento.  Automação  Padronização  Integração  Colaboração  Distribuição
  • 4. Workshop GPEC/Tecsinapse ANT Ferramenta versátil de construção que automatiza processo de compilação, empacotamento e distribuição de um projeto.
  • 6. Workshop GPEC/Tecsinapse Exemplo de um buildfile <project name=quot;MeuProjetoquot; default=quot;compilequot; basedir=quot;.quot;> <target name=quot;initquot;> <property name=quot;srcquot; value=quot;srcquot;/> <property name=quot;distquot; value=quot;classesquot;/> </target> <target name=quot;cleanquot; depends=quot;initquot;> <deltree dir=quot;${dist}quot;/> </target> <target name=quot;preparequot; depends=“cleanquot;> <mkdir dir=quot;${dist}quot;/> </target> <target name=quot;compilequot; depends=quot;init, clean, preparequot;> <javac srcdir=quot;${src}quot; destdir=quot;${dist}quot;/> </target> </project>
  • 7. Workshop GPEC/Tecsinapse O que é Maven? ANT != Maven O Maven oferece uma infra-estrutura de administração de projetos, desde a compilação, a distribuição, a documentação até a colaboração. Baseado no conceito de POM (Project Object Model), arquivo pom.xml
  • 8. Workshop GPEC/Tecsinapse Vantagens do Maven  Aumento de produtividade  Melhor gestão do projeto  Padronização de estrutura  Automatização das dependências  Baseado em plugins. Fácil extensão das funcionalidades  Automatiza teste unitários com JUnit
  • 9. Workshop GPEC/Tecsinapse Desvantages do Maven  Menor versatilidade do que o ANT. Mas são ferramentas bem diferentes!  Curva de aprendizado considerável  Maior complexidade na configuração do ambiente
  • 10. Workshop GPEC/Tecsinapse Modelo de desenvolvimento do Maven  Um processo de construção fácil e uniforme.  Fornece informações do projeto com qualidade.  Estimula boas práticas no desenvolvimento.  Facilita a colaboração e resolve as dependências.
  • 11. Workshop GPEC/Tecsinapse Visão geral do Maven Fonte: Maven 2 e Continuum: Automatizando o seu ambiente de desenvolvimento (Palestra JustJava 2006); Dário Luís Oliveros e José Marcelo Santuci
  • 12. Workshop GPEC/Tecsinapse Visão geral do repositório Maven Fonte: Maven 2 e Continuum: Automatizando o seu ambiente de desenvolvimento (Palestra JustJava 2006); Dário Luís Oliveros e José Marcelo Santuci
  • 13. Workshop GPEC/Tecsinapse Grupo e artefato Grupo e artefato são formas genéricas de representar e organizar projetos. O grupo (groupID) é uma forma de organizar os projetos (por exemplo, os projetos do GPEC). Um artefato (artifactId) é um identificador do projeto, ou parte dele (módulo).
  • 14. Workshop GPEC/Tecsinapse Instalação Já esta instalado neste laboratório. $ mvn -version Mas para instalar, baixe do site: http://maven.apache.org/ Descompacte e coloque o caminho do diretório bin/ do Maven no $PATH da máquina.
  • 15. Workshop GPEC/Tecsinapse Configuração do proxy Crie o arquivo ~/.m2/settings.xml <settings> <proxies> <proxy> <active>true</active> <protocol>http</protocol> <host>proxy.acad.ucdb.br</host> <port>3128</port> <nonProxyHosts>localhost|127.0.0.1</nonProxyHosts> </proxy> </proxies> </settings>
  • 16. Workshop GPEC/Tecsinapse Uso Uso: $ mvn [ fase ] ... Uma fase contém vários plugins em ação. Ou: $ mvn plugin:função Exemplo, criando nova estrutura: $ mvn archetype:create -DgroupId=br.ucdb.gpec -DartifactId=teste1
  • 17. Workshop GPEC/Tecsinapse Estrutura padrão de diretórios / /pom.xml Arquivo de definição do projeto /src/ /src/main/java/... /src/main/resources/... /src/test/java/... ... /target/ (Destino de todas as saídas...)
  • 18. Workshop GPEC/Tecsinapse Arquivo POM mínimo <project> <modelVersion>4.0.0</modelVersion> <groupId>br.ucdb.gpec</groupId> <artifactId>teste1</artifactId> <packaging>jar</packaging> <version>1.0</version> <name>teste1</name> ... ... </project>
  • 19. Workshop GPEC/Tecsinapse Compilação, empacotamento e montagem Compilando: $ mvn compiler:compile Empacotando: $ mvn package Montando: $ mvn assembly:assembly Necessário configurar.
  • 20. Workshop GPEC/Tecsinapse Artefato e repositório Instala no repositório local: $ mvn install A partir deste momento, se o repositório for compartilhado, o projeto já estará disponível para todos. Publica em algum repositório remoto definido no arquivo pom.xml. $ mvn deploy
  • 21. Workshop GPEC/Tecsinapse Publicando em um repositório <distributionManagement> <repository> <id>repo</id> <name>GPEC/Tecsinapse</name> <url>scp://repositorio.intranet/repo/</url> </repository> </distributionManagement> No arquivo ~/.m2/settings.xml é necessário configurar usuario e senha ou chave pública neste caso!
  • 22. Workshop GPEC/Tecsinapse Dependências <dependencies> ... <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate</artifactId> <version>3.2.0.ga</version> </dependency> ... </dependencies>
  • 23. Workshop GPEC/Tecsinapse Dependências As dependências são resolvidas tentando encontrar o artefado em qualquer um dos repositórios configurados, caso não seja possível encontrar tal artefato, o Maven pede que este seja instalado manualmente no repositório local. $ mvn install:install-file -DgroupId=exemplo -DartifactId=xyz -Dversion=1.0 -Dpackaging=jar -Dfile=/tmp/xyz.jar
  • 24. Workshop GPEC/Tecsinapse Dependências Dependências transitivas são incluídas automaticamente.
  • 25. Workshop GPEC/Tecsinapse Dependências É possível instalar um artefato manualmente em um repositório remoto. $ mvn deploy:deploy-file -Dfile=... -DrepositoryId=repositorio.intranet -Durl=scp://...
  • 26. Workshop GPEC/Tecsinapse Geração do site com documentação e relatórios Gera o site e o publica em um servidor Web. $ mvn site $ mvn site:site-deploy Java cross-reference, estilo Javadoc porém utilizando os arquivos fontes. $ mvn jxr:jxr Javadoc: $ mvn javadoc:javadoc
  • 27. Workshop GPEC/Tecsinapse Parceria Maven e ANT Saudades do ANT? $ mvn ant:ant Caso houve modificações nas dependências, faça: $ mvn ant:clean ant:ant
  • 28. Workshop GPEC/Tecsinapse Integração com o Eclipse Habilita o projeto e cria o classpath no Eclipse, agora é só importá-lo na ferramenta. $ mvn eclipse:eclipse $ mvn -Declipse.workspace=... eclipse:add-maven-repo Se houver mudanças nas dependências, feche o projeto dentro do Eclipse e execute: $ mvn eclipse:clean $ mvn eclipse:eclipse $ mvn -Declipse.workspace=... eclipse:add-maven-repo
  • 29. Workshop GPEC/Tecsinapse Configuração do Eclipse Em Preferences > Java > Build Path > Classpath Variables crie a variável M2_REPO com o caminho de seu repositório. Neste caso digite ~/.m2/repository/ A partir deste momento o seu build path no Eclipse deve estar correto.
  • 30. Workshop GPEC/Tecsinapse Configuração do Eclipse Para executar o Maven dentro do Eclipse vá em Run > External Tool > External Tools... Crie um novo Program. Em Location, localize o binário do Maven. Em Working Directory coloque: ${project_loc} Em Arguments, os argumentos para o Maven. Exemplo: package
  • 31. Workshop GPEC/Tecsinapse Testes unitários  O Maven já tem suporte ao Junit.  Por padrão, um projeto só pode ser publicado em um repositório caso passe em todos os seus testes unitários.  Na pasta src/test/java é onde ficam os seus testes unitários, deve respeitar um padrão de nome para serem executados automaticamente.
  • 32. Workshop GPEC/Tecsinapse Outras características  Integração com outras IDE's (Netbeans, IDEA...)  Integração com SCM (Subversion, CVS, ...)  Agrega o ANT.  Vários plugins podem ser encontrados pela Internet.  Suporte à herança e agregação de projetos.  Entre outras...
  • 33. Workshop GPEC/Tecsinapse Referências bibliográficas ANT: http://ant.apache.org/ Better Build with Maven 2: http://www.mergere.com/m2book_download.jsp Site do Maven: http://maven.apache.org/ Automatizando seus projetos com o Maven 2 http://pbjug.org/jugs/documentos/maven_2