maven - gestão de builds e dependencias

49
Maven & Cª Gestão de Builds e Dependências Ruben Badaró 4º Encontro PT.JUG - 29 Jan 09 Sunday 1 February 2009

Upload: ruben-badaro

Post on 17-Jul-2015

3.427 views

Category:

Technology


5 download

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

Raven

Variedade

Sunday 1 February 2009

Desafios

• Automatizar builds

• Onde guardar bibliotecas

• Manter dependências de bibliotecas

Sunday 1 February 2009

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

Dependências Transitivas

A C

B

Sunday 1 February 2009

JAR Hell

Sunday 1 February 2009

JAR Hell

A B0.1

C B0.2

Sunday 1 February 2009

Maven

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

Hierarquia Definida

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 - Configuração mínima

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

POM - Herança

Sunday 1 February 2009

POM - Herança

Sunday 1 February 2009

POM - Agregação

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

• Templates de projectos

• Appfuse é um bom exemplo

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

Integração 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