SlideShare uma empresa Scribd logo
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/

Mais conteúdo relacionado

Mais procurados

Maven em 10 minutos
Maven em 10 minutosMaven em 10 minutos
Maven em 10 minutos
Rodrigo Branas
 
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
Régis Eduardo Weizenmann Gregol
 
Automatização de Infraestrutura com Jenkins
Automatização de Infraestrutura com JenkinsAutomatização de Infraestrutura com Jenkins
Automatização de Infraestrutura com Jenkins
Felipe Santos
 
Maven
MavenMaven
Maven na prática
Maven na práticaMaven na prática
Maven na prática
Anderson Araújo
 
Maven: Introdução
Maven: IntroduçãoMaven: Introdução
Maven: Introdução
JugVale
 
Maven 3, Sonar e Hudson
Maven 3, Sonar e HudsonMaven 3, Sonar e Hudson
Maven 3, Sonar e Hudson
Rodrigo Branas
 
Maven - Aula 01
Maven - Aula 01Maven - Aula 01
Maven - Aula 01
Édipo Daniel Aragão
 
Precisamos falar sobre Gradle
Precisamos falar sobre GradlePrecisamos falar sobre Gradle
Precisamos falar sobre Gradle
Wellington Pinheiro
 
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
Diego 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ínua
Denis Vieira
 
A arquitetura modular do Java 9
A arquitetura modular do Java 9A arquitetura modular do Java 9
A arquitetura modular do Java 9
Helder da Rocha
 
Plugin Maven no Eclipse
Plugin Maven no EclipsePlugin Maven no Eclipse
Plugin Maven no Eclipse
elievanFPaulino
 
Introdução ao Flyway
Introdução ao FlywayIntrodução ao Flyway
Introdução ao Flyway
Jadson Santos
 
Maven - Aula 05
Maven - Aula 05Maven - Aula 05
Maven - Aula 05
Édipo Daniel Aragão
 
Maven - Aula 04
Maven  - Aula 04Maven  - Aula 04
Maven - Aula 04
Édipo Daniel Aragão
 
Jenkins, o CI ao seu dispor
Jenkins, o CI ao seu disporJenkins, o CI ao seu dispor
Jenkins, o CI ao seu dispor
s4nx
 
Integração Continua - Jenkins
Integração Continua - JenkinsIntegração Continua - Jenkins
Integração Continua - Jenkins
João Carlos Ottobboni
 
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
Ricardo Ferreira
 

Mais procurados (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
 

Semelhante a Maven 2

Projetos Java com Maven
Projetos Java com MavenProjetos Java com Maven
Projetos Java com Maven
Edgar Dantas
 
Programando java independente da ide
Programando java independente da ideProgramando java independente da ide
Programando java independente da ide
Heider Lopes
 
Programando java independente da ide
Programando java independente da ideProgramando java independente da ide
Programando java independente da ide
Heider Lopes
 
Quick intro to Apache Maven
Quick intro to Apache MavenQuick intro to Apache Maven
Quick intro to Apache Maven
InformantTalks
 
Tutorial de instalação do Maven
Tutorial de instalação do MavenTutorial de instalação do Maven
Tutorial de instalação do Maven
Allan 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-122
Bruno 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 Source
Globalcode
 
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
Mariana de Azevedo Santos
 
Web Tools Pt Br
Web Tools Pt BrWeb Tools Pt Br
Web Tools Pt Br
Paulo Mattos
 
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
Allyson Barros
 
Alm open source
Alm open sourceAlm open source
Alm open source
Bruno Souza
 
De 0 a DevOps
De 0 a DevOpsDe 0 a DevOps
Assespro pr-workshop-robot framework
Assespro pr-workshop-robot frameworkAssespro pr-workshop-robot framework
Assespro pr-workshop-robot framework
Mayara Fernandes
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDD
PHP 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
 
1409243945064
14092439450641409243945064
1409243945064
Fábio Junior
 
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
Renato 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 Zend
Thiago 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 AWS
Amazon 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
 

Semelhante 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...
 

Mais de Maurício Linhares

Mercado de TI
Mercado de TIMercado de TI
Mercado de TI
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 OfficeDrop
Maurí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 OfficeDrop
Maurício Linhares
 
Aprendendo ruby
Aprendendo rubyAprendendo ruby
Aprendendo ruby
Maurício Linhares
 
Curso java 07 - exceções
Curso java   07 - exceçõesCurso java   07 - exceções
Curso java 07 - exceções
Maurí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ções
Maurí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 polimorfismo
Maurí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 abstratos
Maurí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 bibliotecas
Maurí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 java
Maurício Linhares
 
Curso java 02 - variáveis
Curso java   02 - variáveisCurso java   02 - variáveis
Curso java 02 - variáveis
Maurí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âmetros
Maurício Linhares
 
Extreme programming
Extreme programmingExtreme programming
Extreme programming
Maurício Linhares
 
Feature Driven Development
Feature Driven DevelopmentFeature Driven Development
Feature Driven Development
Maurício Linhares
 
Migrando pra Scala
Migrando pra ScalaMigrando pra Scala
Migrando pra Scala
Maurí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 nuvem
Maurício Linhares
 
Mercado hoje
Mercado hojeMercado hoje
Mercado hoje
Maurício Linhares
 
Análise de sistemas oo 1
Análise de sistemas oo   1Análise de sistemas oo   1
Análise de sistemas oo 1
Maurício Linhares
 
Revisão html e java script
Revisão html e java scriptRevisão html e java script
Revisão html e java script
Maurí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 2010
Maurício Linhares
 

Mais 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/