Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Maven - Gestão de Builds e Dependencias
1. Maven & Cª
Gestão de Builds e Dependências
Ruben Badaró
4º Encontro PT.JUG - 29 Jan 09
Sunday 1 February 2009
2. 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
11. Maven significa “aquele que acumula
conhecimento” em iídiche.
Um especialista numa determinada área
que procura passar o seu conhecimento.
Sunday 1 February 2009
12. 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
13. 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
14. Características
• •
Builds automatizados Plugins são cidadãos de
1ª classe
• Lifecycle bem definido
• Quickstart rápido de
• projectos
Repositório de
artefactos
• Site de projecto
• facilmente acessível
Gestão de Dependências
•
• Integração com VCS
Definição de Projectos
declarativa (POM)
Sunday 1 February 2009
15. Ant vs. Maven
Ant Maven
Convention Over
Não tem convenções
Configuration
Procedimental Declarativo
Sem Lifecycle definido Lifecycle definido
Sunday 1 February 2009
17. 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
19. 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
23. 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
24. 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
25. Custom Plugins
• Usar archetype para criar
• Cria pom com packaging maven-plugin
Sunday 1 February 2009
26. 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
27. 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
28. 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
30. Build Lifecycle - JAR
validate generate-test-sources package
generate-sources process-test-sources pre-integration-test
process-sources generate-test-resources integration-test
generate-resources process-test-resources post-integration-test
process-resources test-compile verify
compile test install
process-classes prepare-package deploy
Sunday 1 February 2009
31. Build Lifecycle - JAR
process-resources test
resources:resources surefire:test
compile package
compiler:compile jar:jar
generate-test-resources install
resources:testResources install:install
test-compile deploy
compiler:testCompile deploy:deploy
Sunday 1 February 2009
32. 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
33. 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
34. 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
35. Repositório
Internet Rede Empresarial Local
Repo Repo Repo
Central Proxy Local
Sunday 1 February 2009
37. SNAPSHOTS
• Se versão incluir “SNAPSHOT” é
considerada em desenvolvimento
• Maven executa lifecycle sempre se for
SNAPSHOT
Sunday 1 February 2009
38. 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
39. 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
40. Archetypes
• Templates de projectos
• Appfuse é um bom exemplo
Sunday 1 February 2009
41. 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
42. 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
44. 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
45. 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
46. 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
47. 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
48. 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
49. The End
Perguntas? Jantar?
Ruben Badaró
ruben.badaro@gmail.com
http://www.zonaj.org
Sunday 1 February 2009