SlideShare una empresa de Scribd logo
1 de 36
Descargar para leer sin conexión
Maven 2.0

Gerenciando os seus projetos
     com o Maven 2.0
           2005
Maurício Linhares

   http://maujr.org/
Qual o problema?


Fazer o build dos projetos deve ser
simples, você não deve passar horas
tentando gerar um artefato a partir do
            código fonte.
Jorge            Thiago




Trabalham em partes diferentes
    de um mesmo projeto
•  Usa o NetBeans 5.0
•  Monta os seus builds com   Jorge
   o Ant
•  Usa a estrutura de
   diretórios comum do
   NetBeans
•  Não usa um sistema de
   controle de versão
•  Usa o Eclipse 3.1 com o
   Web Tools Platform (WTP)        Thiago
•  Faz os builds dentro do
   Eclipse, com o WTP
•  Usa a estrutura de diretórios
   do WTP
•  Também não usa um
   sistema de controle de
   versão
Um belo dia...

          ... Jorge fica doente

   E surge um bug no seu
   projeto que precisa ser
          resolvido
Thiago
Quem é que
  tem que
 resolver?
Problemas?
•  Thiago nunca usou o NetBeans
•  Thiago nem imagina como é que se usa o
   Ant
•  Não é possível importar o projeto de Jorge
   para o Eclipse, os diretórios não batem
Thiago
Alguns dias de
   trabalho
   depois...
Qual a moral da história?


 Os projetos devem ser
     padronizados!
Assuntos
•    Como surgiu o Maven?
•    O que é o Maven?
•    Como o Maven funciona?
•    Padronizando os projetos
•    Maven e os seus plugins
Como surgiu o Maven?
•  Necessidade de padronização dos sub-
   projetos dentro do projeto Jakarta Turbine
•  Era necessário evitar o envio de
   arquivos .jar para o controle de versão
•  Era necessário facilitar o entendimento de
   cada sub-projeto no sistema
O que é o Maven?
•    Gerenciador de builds
•    Gerenciador de dependências
•    Gerador de documentação
•    Provedor de ferramentas para a avaliação
     da qualidade do projeto
Objetivos do Maven (1-2)
•  Tornar o processo de desenvolvimento visível e
   transparente
•  Prover uma maneira simples de analisar o status
   de um projeto
•  Diminuir o tempo de adequação de novos
   desenvolvedores
•  Reunir ferramentas necessárias uniformemente
Objetivos do Maven (2-2)
•  Evitar configurações inconsistentes
•  Prover uma estrutura comum para todos
   os projetos
•  Foco no desenvolvimento das aplicações,
   não no build dos projetos
Como o Maven funciona?
•  Os projetos são descritos usando o
   Project Object Model (POM)
•  Os plugins são invocados e executados
   sobre o projeto em questão através das
   informações do POM
O que fica no POM?
•    Desenvolvedores
•    Dependências
•    Configuração de plugins
•    Controle de versão
•    Repositórios...
Exemplo de POM
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.codehaus.cargo</groupId>
  <artifactId>cargo-core-api-container</artifactId>
  <name>Cargo Core Container API</name>
  <version>0.7-SNAPSHOT</version>
  <packaging>jar</packaging>
  <dependencies/>
  <build/>
</project>
Padronizando o projeto

•  O Maven define uma estrutura de
   diretórios default
•  A estrutura padrão é resultado da
   experiência dos próprios desenvolvedores
   do Maven
•  É possível (mas não é aconselhável)
   configurar uma estrutura de diretórios
   diferente
Estrutura de diretórios
•  src/                   -- pasta raiz
   –  main/               -- tronco principal
          •  java/        -- código fonte Java
          •  resources/   -- recursos (arquivos de configuração, imagens, etc)
          •  webapp/      -- aplicação web Java
   –  test/               -- tronco de testes unitários e de integração
          •  java/        -- código fonte dos testes do JUnit
          •  resources/   -- recursos dos testes
          •  cactus/      -- códigos dos testes de integração do Cactus
   –  site/               -- tronco principal da documentação
Fases de um projeto no Maven

Gerar código inicial            Empacotar

     Compilar               Testes de integração

 Testes unitários                 Instalar


                    Implantar
Repositórios
•  Locais de armazenamento de diversos
   tipos de artefatos
•  Toda a gerencia do repositório é feita pelo
   próprio Maven
•  Não é necessário declarar caminhos
   relativos para os artefatos
Buscando dependências

  Repositório            Repositório
   Remoto                  local




<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate</artifactId>
  <version>3.1.2</version>
</dependency>
Dependências ou artefatos
•  São mantidas nos repositórios (locais ou
   remotos)
•  São transitivas
•  Podem ser atualizadas automaticamente
   pelo Maven
Transitividade das dependências
                               Dependência
•  Não é necessário declarar    declarada
   toda a árvore de
   dependências, o Maven só         A
   precisa saber a
   dependência raiz             B       C


                                        D
Documentação e relatórios
•  Gera um site descritivo do projeto (listas
   de discussão, desenvolvedores,
   dependências)
•  Gera relatórios sobre o projeto (qualidade,
   JavaDoc, arquivos fonte)
O Maven e seus Plugins
•    Meios de extensão para o Maven
•    São buscados nos repositórios disponíveis
•    São configurados dentro do POM
•    Existem mais de 80 plugins oficiais
     catalogados
Configuração de um plugin

<plugins>
  <plugin>
      <artifactId>maven-compiler-plugin</artifactId>
      <configuration>
            <source>1.5</source>
            <target>1.5</target>
      </configuration>
  </plugin>
</plugins>
Avaliando a migração para o
           Maven 2.0
•  Quando não existe padronização
•  Quando o padrão é o Ant
•  Quando o padrão é o Maven 1.0
Sem padrão
•  Define um padrão para todos os projetos
•  Facilita a integração e o reconhecimento
   do código
•  Centraliza as informações sobre projetos
   e sub-projetos
Ant como padrão
•  Diminui a quantidade de configuração
   necessária para o build
•  Tasks do Ant podem ser invocados pelo
   Maven
•  Quantidade imensa de plugins prontos
   para ser utilizados
Maven 1.0 como padrão
•  O desenvolvimento do Maven 1.0 está
    congelado
•  Novos plugins e integração com outras
   ferramentas está sendo feito com base no
   Maven 2
Conclusão
O objetivo principal do Maven como ferramenta
é padronizar os projetos, para que eles possam
ser gerenciados e entendidos com mais
facilidade, para que os envolvidos se
preocupem mais com o desenvolvimento e
menos com as configurações
Perguntas?
Referências
•  MASSOL, Vincent; O BRIEN, Timothy.
   Maven: A Developer s Notebook.
   O Reilly, 2005.
•  MASSOL, Vincent. Maven 2.0 – Improve
   your build patterns. Palestra no Javapolis
   2005 – disponível em http://javapolis.com/

Más contenido relacionado

La actualidad más candente

Automatização de Infraestrutura com Jenkins
Automatização de Infraestrutura com JenkinsAutomatização de Infraestrutura com Jenkins
Automatização de Infraestrutura com JenkinsFelipe Santos
 
Maven: Introdução
Maven: IntroduçãoMaven: Introdução
Maven: IntroduçãoJugVale
 
Maven 3, Sonar e Hudson
Maven 3, Sonar e HudsonMaven 3, Sonar e Hudson
Maven 3, Sonar e HudsonRodrigo Branas
 
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
 
Jenkins integrando e estendendo.
Jenkins integrando e estendendo.Jenkins integrando e estendendo.
Jenkins integrando e estendendo.Leonardo Kobus
 
Jenkins e a Integração Contínua
Jenkins e a Integração ContínuaJenkins e a Integração Contínua
Jenkins e a Integração ContínuaDenis Vieira
 
A arquitetura modular do Java 9
A arquitetura modular do Java 9A arquitetura modular do Java 9
A arquitetura modular do Java 9Helder da Rocha
 
Introdução ao Flyway
Introdução ao FlywayIntrodução ao Flyway
Introdução ao FlywayJadson Santos
 
Jenkins, o CI ao seu dispor
Jenkins, o CI ao seu disporJenkins, o CI ao seu dispor
Jenkins, o CI ao seu dispors4nx
 
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & HudsonSuporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & HudsonRicardo Ferreira
 

La actualidad más candente (20)

Maven em 10 minutos
Maven em 10 minutosMaven em 10 minutos
Maven em 10 minutos
 
Apresentacao de Introdução ao Apache Maven
Apresentacao de Introdução ao Apache MavenApresentacao de Introdução ao Apache Maven
Apresentacao de Introdução ao Apache Maven
 
Automatização de Infraestrutura com Jenkins
Automatização de Infraestrutura com JenkinsAutomatização de Infraestrutura com Jenkins
Automatização de Infraestrutura com Jenkins
 
Maven
MavenMaven
Maven
 
Maven na prática
Maven na práticaMaven na prática
Maven na prática
 
Maven: Introdução
Maven: IntroduçãoMaven: Introdução
Maven: Introdução
 
Maven 3, Sonar e Hudson
Maven 3, Sonar e HudsonMaven 3, Sonar e Hudson
Maven 3, Sonar e Hudson
 
Maven - Aula 01
Maven - Aula 01Maven - Aula 01
Maven - Aula 01
 
Precisamos falar sobre Gradle
Precisamos falar sobre GradlePrecisamos falar sobre Gradle
Precisamos falar sobre Gradle
 
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
 
Jenkins integrando e estendendo.
Jenkins integrando e estendendo.Jenkins integrando e estendendo.
Jenkins integrando e estendendo.
 
Jenkins e a Integração Contínua
Jenkins e a Integração ContínuaJenkins e a Integração Contínua
Jenkins e a Integração Contínua
 
A arquitetura modular do Java 9
A arquitetura modular do Java 9A arquitetura modular do Java 9
A arquitetura modular do Java 9
 
Plugin Maven no Eclipse
Plugin Maven no EclipsePlugin Maven no Eclipse
Plugin Maven no Eclipse
 
Introdução ao Flyway
Introdução ao FlywayIntrodução ao Flyway
Introdução ao Flyway
 
Maven - Aula 05
Maven - Aula 05Maven - Aula 05
Maven - Aula 05
 
Maven - Aula 04
Maven  - Aula 04Maven  - Aula 04
Maven - Aula 04
 
Jenkins, o CI ao seu dispor
Jenkins, o CI ao seu disporJenkins, o CI ao seu dispor
Jenkins, o CI ao seu dispor
 
Integração Continua - Jenkins
Integração Continua - JenkinsIntegração Continua - Jenkins
Integração Continua - Jenkins
 
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & HudsonSuporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
 

Similar a Maven 2

Projetos Java com Maven
Projetos Java com MavenProjetos Java com Maven
Projetos Java com MavenEdgar Dantas
 
Programando java independente da ide
Programando java independente da ideProgramando java independente da ide
Programando java independente da ideHeider Lopes
 
Programando java independente da ide
Programando java independente da ideProgramando java independente da ide
Programando java independente da ideHeider Lopes
 
Quick intro to Apache Maven
Quick intro to Apache MavenQuick intro to Apache Maven
Quick intro to Apache MavenInformantTalks
 
Tutorial de instalação do Maven
Tutorial de instalação do MavenTutorial de instalação do Maven
Tutorial de instalação do MavenAllan Alves
 
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122Bruno Souza
 
Introdução a Application Life-cycle Management Open Source
Introdução a Application Life-cycle Management Open SourceIntrodução a Application Life-cycle Management Open Source
Introdução a Application Life-cycle Management Open SourceGlobalcode
 
Spring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaSpring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaMariana de Azevedo Santos
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorAllyson Barros
 
Assespro pr-workshop-robot framework
Assespro pr-workshop-robot frameworkAssespro pr-workshop-robot framework
Assespro pr-workshop-robot frameworkMayara Fernandes
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDDPHP Day Curitiba
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...Renato Groff
 
Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019
Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019
Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019Renato Groff
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendThiago Sinésio
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAmazon Web Services LATAM
 
DevCommerce Conference 2016: SecDevOps – Testes contínuos de segurança em apl...
DevCommerce Conference 2016: SecDevOps – Testes contínuos de segurança em apl...DevCommerce Conference 2016: SecDevOps – Testes contínuos de segurança em apl...
DevCommerce Conference 2016: SecDevOps – Testes contínuos de segurança em apl...iMasters
 

Similar a Maven 2 (20)

Projetos Java com Maven
Projetos Java com MavenProjetos Java com Maven
Projetos Java com Maven
 
Programando java independente da ide
Programando java independente da ideProgramando java independente da ide
Programando java independente da ide
 
Programando java independente da ide
Programando java independente da ideProgramando java independente da ide
Programando java independente da ide
 
Quick intro to Apache Maven
Quick intro to Apache MavenQuick intro to Apache Maven
Quick intro to Apache Maven
 
Tutorial de instalação do Maven
Tutorial de instalação do MavenTutorial de instalação do Maven
Tutorial de instalação do Maven
 
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
 
Introdução a Application Life-cycle Management Open Source
Introdução a Application Life-cycle Management Open SourceIntrodução a Application Life-cycle Management Open Source
Introdução a Application Life-cycle Management Open Source
 
Spring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaSpring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em Java
 
Web Tools Pt Br
Web Tools Pt BrWeb Tools Pt Br
Web Tools Pt Br
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
 
Alm open source
Alm open sourceAlm open source
Alm open source
 
De 0 a DevOps
De 0 a DevOpsDe 0 a DevOps
De 0 a DevOps
 
Assespro pr-workshop-robot framework
Assespro pr-workshop-robot frameworkAssespro pr-workshop-robot framework
Assespro pr-workshop-robot framework
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDD
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
 
1409243945064
14092439450641409243945064
1409243945064
 
Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019
Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019
Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
 
DevCommerce Conference 2016: SecDevOps – Testes contínuos de segurança em apl...
DevCommerce Conference 2016: SecDevOps – Testes contínuos de segurança em apl...DevCommerce Conference 2016: SecDevOps – Testes contínuos de segurança em apl...
DevCommerce Conference 2016: SecDevOps – Testes contínuos de segurança em apl...
 

Más de Maurício Linhares

Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDropUnindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDropMaurício Linhares
 
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDropMixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDropMaurício Linhares
 
Curso java 08 - mais sobre coleções
Curso java   08 - mais sobre coleçõesCurso java   08 - mais sobre coleções
Curso java 08 - mais sobre coleçõesMaurício Linhares
 
Curso java 06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismoCurso java   06 - mais construtores, interfaces e polimorfismo
Curso java 06 - mais construtores, interfaces e polimorfismoMaurício Linhares
 
Curso java 05 - herança, classes e métodos abstratos
Curso java   05 - herança, classes e métodos abstratosCurso java   05 - herança, classes e métodos abstratos
Curso java 05 - herança, classes e métodos abstratosMaurício Linhares
 
Curso java 04 - ap is e bibliotecas
Curso java   04 - ap is e bibliotecasCurso java   04 - ap is e bibliotecas
Curso java 04 - ap is e bibliotecasMaurício Linhares
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com javaMaurício Linhares
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetrosMaurício Linhares
 
Outsourcing e trabalho remoto para a nuvem
Outsourcing e trabalho remoto para a nuvemOutsourcing e trabalho remoto para a nuvem
Outsourcing e trabalho remoto para a nuvemMaurício Linhares
 
Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010Maurício Linhares
 

Más de Maurício Linhares (20)

Mercado de TI
Mercado de TIMercado de TI
Mercado de TI
 
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDropUnindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
 
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDropMixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
 
Aprendendo ruby
Aprendendo rubyAprendendo ruby
Aprendendo ruby
 
Curso java 07 - exceções
Curso java   07 - exceçõesCurso java   07 - exceções
Curso java 07 - exceções
 
Curso java 08 - mais sobre coleções
Curso java   08 - mais sobre coleçõesCurso java   08 - mais sobre coleções
Curso java 08 - mais sobre coleções
 
Curso java 06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismoCurso java   06 - mais construtores, interfaces e polimorfismo
Curso java 06 - mais construtores, interfaces e polimorfismo
 
Curso java 05 - herança, classes e métodos abstratos
Curso java   05 - herança, classes e métodos abstratosCurso java   05 - herança, classes e métodos abstratos
Curso java 05 - herança, classes e métodos abstratos
 
Curso java 04 - ap is e bibliotecas
Curso java   04 - ap is e bibliotecasCurso java   04 - ap is e bibliotecas
Curso java 04 - ap is e bibliotecas
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
 
Curso java 02 - variáveis
Curso java   02 - variáveisCurso java   02 - variáveis
Curso java 02 - variáveis
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetros
 
Extreme programming
Extreme programmingExtreme programming
Extreme programming
 
Feature Driven Development
Feature Driven DevelopmentFeature Driven Development
Feature Driven Development
 
Migrando pra Scala
Migrando pra ScalaMigrando pra Scala
Migrando pra Scala
 
Outsourcing e trabalho remoto para a nuvem
Outsourcing e trabalho remoto para a nuvemOutsourcing e trabalho remoto para a nuvem
Outsourcing e trabalho remoto para a nuvem
 
Mercado hoje
Mercado hojeMercado hoje
Mercado hoje
 
Análise de sistemas oo 1
Análise de sistemas oo   1Análise de sistemas oo   1
Análise de sistemas oo 1
 
Revisão html e java script
Revisão html e java scriptRevisão html e java script
Revisão html e java script
 
Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010
 

Maven 2

  • 1. Maven 2.0 Gerenciando os seus projetos com o Maven 2.0 2005
  • 2. Maurício Linhares http://maujr.org/
  • 3. Qual o problema? Fazer o build dos projetos deve ser simples, você não deve passar horas tentando gerar um artefato a partir do código fonte.
  • 4. Jorge Thiago Trabalham em partes diferentes de um mesmo projeto
  • 5. •  Usa o NetBeans 5.0 •  Monta os seus builds com Jorge o Ant •  Usa a estrutura de diretórios comum do NetBeans •  Não usa um sistema de controle de versão
  • 6. •  Usa o Eclipse 3.1 com o Web Tools Platform (WTP) Thiago •  Faz os builds dentro do Eclipse, com o WTP •  Usa a estrutura de diretórios do WTP •  Também não usa um sistema de controle de versão
  • 7. Um belo dia... ... Jorge fica doente E surge um bug no seu projeto que precisa ser resolvido
  • 8. Thiago Quem é que tem que resolver?
  • 9. Problemas? •  Thiago nunca usou o NetBeans •  Thiago nem imagina como é que se usa o Ant •  Não é possível importar o projeto de Jorge para o Eclipse, os diretórios não batem
  • 10. Thiago Alguns dias de trabalho depois...
  • 11. Qual a moral da história? Os projetos devem ser padronizados!
  • 12. Assuntos •  Como surgiu o Maven? •  O que é o Maven? •  Como o Maven funciona? •  Padronizando os projetos •  Maven e os seus plugins
  • 13. Como surgiu o Maven? •  Necessidade de padronização dos sub- projetos dentro do projeto Jakarta Turbine •  Era necessário evitar o envio de arquivos .jar para o controle de versão •  Era necessário facilitar o entendimento de cada sub-projeto no sistema
  • 14. O que é o Maven? •  Gerenciador de builds •  Gerenciador de dependências •  Gerador de documentação •  Provedor de ferramentas para a avaliação da qualidade do projeto
  • 15. Objetivos do Maven (1-2) •  Tornar o processo de desenvolvimento visível e transparente •  Prover uma maneira simples de analisar o status de um projeto •  Diminuir o tempo de adequação de novos desenvolvedores •  Reunir ferramentas necessárias uniformemente
  • 16. Objetivos do Maven (2-2) •  Evitar configurações inconsistentes •  Prover uma estrutura comum para todos os projetos •  Foco no desenvolvimento das aplicações, não no build dos projetos
  • 17. Como o Maven funciona? •  Os projetos são descritos usando o Project Object Model (POM) •  Os plugins são invocados e executados sobre o projeto em questão através das informações do POM
  • 18. O que fica no POM? •  Desenvolvedores •  Dependências •  Configuração de plugins •  Controle de versão •  Repositórios...
  • 19. Exemplo de POM <project> <modelVersion>4.0.0</modelVersion> <groupId>org.codehaus.cargo</groupId> <artifactId>cargo-core-api-container</artifactId> <name>Cargo Core Container API</name> <version>0.7-SNAPSHOT</version> <packaging>jar</packaging> <dependencies/> <build/> </project>
  • 20. Padronizando o projeto •  O Maven define uma estrutura de diretórios default •  A estrutura padrão é resultado da experiência dos próprios desenvolvedores do Maven •  É possível (mas não é aconselhável) configurar uma estrutura de diretórios diferente
  • 21. Estrutura de diretórios •  src/ -- pasta raiz –  main/ -- tronco principal •  java/ -- código fonte Java •  resources/ -- recursos (arquivos de configuração, imagens, etc) •  webapp/ -- aplicação web Java –  test/ -- tronco de testes unitários e de integração •  java/ -- código fonte dos testes do JUnit •  resources/ -- recursos dos testes •  cactus/ -- códigos dos testes de integração do Cactus –  site/ -- tronco principal da documentação
  • 22. Fases de um projeto no Maven Gerar código inicial Empacotar Compilar Testes de integração Testes unitários Instalar Implantar
  • 23. Repositórios •  Locais de armazenamento de diversos tipos de artefatos •  Toda a gerencia do repositório é feita pelo próprio Maven •  Não é necessário declarar caminhos relativos para os artefatos
  • 24. Buscando dependências Repositório Repositório Remoto local <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate</artifactId> <version>3.1.2</version> </dependency>
  • 25. Dependências ou artefatos •  São mantidas nos repositórios (locais ou remotos) •  São transitivas •  Podem ser atualizadas automaticamente pelo Maven
  • 26. Transitividade das dependências Dependência •  Não é necessário declarar declarada toda a árvore de dependências, o Maven só A precisa saber a dependência raiz B C D
  • 27. Documentação e relatórios •  Gera um site descritivo do projeto (listas de discussão, desenvolvedores, dependências) •  Gera relatórios sobre o projeto (qualidade, JavaDoc, arquivos fonte)
  • 28. O Maven e seus Plugins •  Meios de extensão para o Maven •  São buscados nos repositórios disponíveis •  São configurados dentro do POM •  Existem mais de 80 plugins oficiais catalogados
  • 29. Configuração de um plugin <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> </plugins>
  • 30. Avaliando a migração para o Maven 2.0 •  Quando não existe padronização •  Quando o padrão é o Ant •  Quando o padrão é o Maven 1.0
  • 31. Sem padrão •  Define um padrão para todos os projetos •  Facilita a integração e o reconhecimento do código •  Centraliza as informações sobre projetos e sub-projetos
  • 32. Ant como padrão •  Diminui a quantidade de configuração necessária para o build •  Tasks do Ant podem ser invocados pelo Maven •  Quantidade imensa de plugins prontos para ser utilizados
  • 33. Maven 1.0 como padrão •  O desenvolvimento do Maven 1.0 está congelado •  Novos plugins e integração com outras ferramentas está sendo feito com base no Maven 2
  • 34. Conclusão O objetivo principal do Maven como ferramenta é padronizar os projetos, para que eles possam ser gerenciados e entendidos com mais facilidade, para que os envolvidos se preocupem mais com o desenvolvimento e menos com as configurações
  • 36. Referências •  MASSOL, Vincent; O BRIEN, Timothy. Maven: A Developer s Notebook. O Reilly, 2005. •  MASSOL, Vincent. Maven 2.0 – Improve your build patterns. Palestra no Javapolis 2005 – disponível em http://javapolis.com/