maven - gestão de builds e dependencias
TRANSCRIPT
Maven & CªGestão de Builds e Dependências
Ruben Badaró4º Encontro PT.JUG - 29 Jan 09
Sunday 1 February 2009
Gestão de Builds
• Processo moroso e repetitivo
• Não se resume a construir software: testar artefactos, análise estática, etc.
• Processo homogéneo para toda a equipa
Sunday 1 February 2009
Desafios
• Automatizar builds
• Onde guardar bibliotecas
• Manter dependências de bibliotecas
Sunday 1 February 2009
Gestão de Dependências
• Múltiplos Componentes
• Componentes dependem de outros componentes
• Múltiplas versões
A B
Sunday 1 February 2009
Maven significa “aquele que acumula conhecimento” em iídiche.
Um especialista numa determinada área que procura passar o seu conhecimento.
Sunday 1 February 2009
Definição
Maven is a software project management and comprehension tool. Based on the concept of a
project object model (POM), Maven can manage a project's build, reporting and documentation from a
central piece of information.
Sunday 1 February 2009
Objectivos
• Convention Over Configuration
• One size does not fit all
• Partilhar JARs entre projectos
• Informação sobre projecto facilmente acessível
Sunday 1 February 2009
Características• Builds automatizados
• Lifecycle bem definido
• Repositório de artefactos
• Gestão de Dependências
• Definição de Projectos declarativa (POM)
• Plugins são cidadãos de 1ª classe
• Quickstart rápido de projectos
• Site de projecto facilmente acessível
• Integração com VCS
Sunday 1 February 2009
Ant vs. Maven
Ant Maven
Não tem convençõesConvention Over
Configuration
Procedimental Declarativo
Sem Lifecycle definido Lifecycle definido
Sunday 1 February 2009
POM
• Project Object Model
• Herança e agregação de projectos
• Definições de projecto
• Customizações (definições para plugins, repositórios, etc.)
Sunday 1 February 2009
POM - propriedades
• groupId (nome do package - empresa)
• artifactId (identificador do projecto)
• packaging (pom, war, jar, etc. - default jar)
• version (versão de release ou SNAPSHOT)
• classifier
Sunday 1 February 2009
Plugins
• Cidadãos de 1ª classe
• Core do Maven simples - funcionalidades implementadas em plugins
• Ecossistema de 3rd parties rico
• Acessível criar os próprios plugins
Sunday 1 February 2009
Plugins
• Cada plugin tem goals - Mojos
• Plugin associado a fase do lifecycle
• Invocação de um plugin/goal
• Invocação de uma fase
Sunday 1 February 2009
Custom Plugins
• Usar archetype para criar
• Cria pom com packaging maven-plugin
Sunday 1 February 2009
Custom Plugins - Convenções
• prefix-maven-plugin / maven-prefix-plugin
• Implementar Mojo com nome GoalMojo
• @goal goalName
• Adicionar groupId ao settings.xml
Sunday 1 February 2009
Custom Plugins
• Também possível em Ant
• ${basedir}/src/main/scripts/goal.build.xml
• ${basedir}/src/main/scripts/goal.mojo.xml
• E noutras linguagens que se queira: Ruby, Groovy
Sunday 1 February 2009
Lifecycles
• Sequência de fases com goals associados
• 3 tipos
• Build lifecycle
• Clean lifecycle
• Site lifecycle
• Possível definir custom lifecycle ou fazer override
Sunday 1 February 2009
Build Lifecyclevalidate packagegenerate-test-sources
generate-sources pre-integration-testprocess-test-sources
process-sources integration-testgenerate-test-resources
generate-resources post-integration-testprocess-test-resources
process-resources verifytest-compile
compile installtest
process-classes deployprepare-package
Sunday 1 February 2009
Build Lifecycle - JARvalidate packagegenerate-test-sources
generate-sources pre-integration-testprocess-test-sources
process-sources integration-testgenerate-test-resources
generate-resources post-integration-testprocess-test-resources
process-resources verifytest-compile
compile installtest
process-classes deployprepare-package
Sunday 1 February 2009
Build Lifecycle - JAR
package
jar:jar
generate-test-resources
resources:testResources
process-resources
resources:resources
test-compile
compiler:testCompile
compile
compiler:compile
install
install:install
test
surefire:test
deploy
deploy:deploy
Sunday 1 February 2009
Profiles
• Permite criar perfis de ambientes de build
• Faz-se override a configurações (quase todas)
• Invoca-se com -P na linha de comandos
• Alternativamente, usam-se activations (jdk, os, props)
Sunday 1 February 2009
Repositório
• Todos os artefactos e plugins guardados num repositório local
• Dependências externas são carregadas para repo local
• Pode-se sempre instalar directamente no repo local
Sunday 1 February 2009
Repositório
• Localizado em $user_home/.m2
• Segue estrutura bem definida
• Criar repositórios proxy a nível da organização
• Apontar alterando settings.xml ou no POM
Sunday 1 February 2009
Repositório
Repo Central
Internet Rede Empresarial Local
Repo Proxy
Repo Local
Sunday 1 February 2009
Repositório
• Repositório central:
http://repo1.maven.org/maven2
• Pesquisa online:
http://mvnrepository.com
• Ferramentas úteis
• Archiva
• Nexus
Sunday 1 February 2009
SNAPSHOTS
• Se versão incluir “SNAPSHOT” é considerada em desenvolvimento
• Maven executa lifecycle sempre se for SNAPSHOT
Sunday 1 February 2009
Gestão de dependências
• Suporta dependências transitivas
• Resolve dependências de dependências
• scope: compile (default), provided, runtime, test, system
Sunday 1 February 2009
Gestão de dependências
• Range versions: [ ] e ( )
• Dependências opcionais (optional)
• Excluir dependências
- Para resolver conflitos
- Para substituir dependências transitivas
Sunday 1 February 2009
Archetypes
• Mais simples ainda
• Entra em modo interactivo e lista todos os archetypes disponíveis
• Ex: maven-archetype-quickstart, maven-archetype-webapp, maven-archetype-mojo
Sunday 1 February 2009
Integração Ant
• 3 aproximações típicas:
• Usar tasks Ant no Maven: maven-antrun-plugin
- Não copiar script Ant para o POM. Deixar num build.xml e usar <ant>
• Ant tasks for Maven: conjunto de tasks que disponibilizam funcionalidades Maven
• Plugins em scripts Ant
Sunday 1 February 2009
Site
• Geração automática de site de projecto
• Info de projecto e equipa
• Relatórios
• Personalizável
• Deployable (scp, ftp, dav)
• Custom templating - usa Doxia que usa Velocity
Sunday 1 February 2009
Best Practices
• Planear
• Usar plugins dos IDEs
• Archetypes para quickstart - criar os vossos próprios para projectos internos
• Deixar parametrizações personalizadas no settings.xml
• Evolução progressiva em migrações de Ant
Sunday 1 February 2009
Best Practices
• Utilizar profiles para ambientes - DEV, QUA, PROD, ...
• Dependendo do profile, usar SNAPSHOTS para DEV e integrar releases com controlo de versões - maven-release-plugin
• Enquadrar “módulos” de controlos de versões com dependências
Sunday 1 February 2009
Best Practices
• Não repetir dependências desnecessárias
• Parametrizar plugins existentes antes de criar novos
• Usar proxy repositories
• Usar integração contínua (Continuum, Hudson, Atlassian Bamboo, JetBrains Teamcity)
Sunday 1 February 2009
Pequeno twist - Buildr
• Maven para quem é cool
• Escreve-se em Ruby no lugar de XML
• Usa mesmo layout e repositórios que maven
• Mas não é directo passar de POM para buildfile
• Menos declarativo, mais poderoso
Sunday 1 February 2009
The End
Perguntas? Jantar?
Ruben Badaró[email protected]
http://www.zonaj.org
Sunday 1 February 2009