Introdução ao Maven. Leonardo Gresta Paulino Murta leomurta@ic.uff.br



Documentos relacionados
Introdução ao Apache Maven

Desenvolvimento Flex com Maven

Apache Ant. Leonardo Gresta Paulino Murta

Demoiselle Tutorial Módulo 1 Arquitetura

Plugins para Integração

Introdução ao Android

SCC Técnicas de Programação para WEB. Rodrigo Fernandes de Mello

Software Open Source e Integração Contínua no Instituto de Informática Ferramentas de Integração Contínua

Integração contínua com Hudson - Configuração, Extensão e Diversão! Fabiane Bizinella Nardon fabiane.nardon@zilics.com.br Zilics

O nome ANT é uma sigla para another neat tool (mais uma ferramenta organizada), segundo seu autor James Duncan Davidson.

Criação de um novo projeto no Eclipse utilizando Maven

Builds com Gradle: programativo e declarativo. Conheça a ferramenta de build para a JVM que está ganhando muita popularidade.

Tutorial Eclipse (IDE)

Modulo II Gerência de Configuração com Maven

Procedimentos para Configuração do Ambiente J2EE e J2SE em Ambiente Windows

Hoje em dia é muito comum utilizar uma API de logging de mensagens como o Log4j para indicar os comportamentos de uma aplicação.

Tutorial Módulo 06 - Segurança

CURSO DE PROGRAMAÇÃO EM JAVA

Ricardo R. Lecheta. Novatec

ROTEIRO ILUSTRADO PARA SISTEMA COMPUTACIONAL INSANE

Introdução ao IDE Netbeans (Programação Java)

Universidade da Beira Interior. Sistemas Distribuídos /2015 Curso: Engª Informática. Folha 11. JAX-RS: Java API for RESTful Web Services

SISTEMA DE WORKFLOW PARA MODELAGEM E EXECUÇÃO DE PROCESSOS DE SOFTWARE. Aluno: Roberto Reinert Orientador: Everaldo A. Grahl

Desenvolvimento para Android Prá9ca 2. Prof. Markus Endler

Introdução ao Sistema Operacional Linux. Responsáveis: Professora Dra. Renata Spolon Lobato Graduando Gabriel Henrique Martinez Saraiva.

PLATAFORMA DE DESENVOLVIMENTO PINHÃO PARANÁ PADRÃO PARA ORGANIZAÇÃO FÍSICA DE ARQUIVOS EM APLICAÇÕES JAVA WEB

Java Laboratório Aula 1. Divisões da Plataforma. Introdução a Plataforma Java. Visão geral da arquitetura da

Guia do Demoiselle Audit Demoiselle Audit Paulo Gladson Ximenes Pinheiro Clóvis Lemes Ferreira Júnior

Java para Desktop. Introdução à Plataforma Java JSE

BlackBerry Messenger SDK

Google App Engine. André Gustavo Duarte de Almeida. Computação Ubíqua e Nuvens. Natal, 24 de maio de 2012 andregustavoo@gmail.com

Linguagem Java. Arquitetura e Ambiente de Desenvolvimento. Arquitetura e Ambiente de Desenvolvimento Prof. Anderson Augustinho Uniandrade

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Guião de Introdução ao Eclipse IDE Índice

INTRODUÇÃO À PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS. ADS 6º Período

Instalando o plugin CDT 4.0

Ambientação JAVA. Versão 0.1 MICHEL CORDEIRO ANALISTA DE NEGÓCIO (NTI 2014) 1 UNIVERSIDADE CEUMA 08/01/2014

FACULDADE DE TECNOLOGIA SENAC GOIÁS PROGRAMAÇÃO PARA INTERNET TUTORIAL DE APLICAÇÃO JSF DESENVOLVIDO COM A FERRAMENTA ECLIPSE LUNA

Como criar um EJB. Criando um projeto EJB com um cliente WEB no Eclipse

Ferramenta de apoio a gerência de configuração de software. Aluno: Rodrigo Furlaneto Orientador: Everaldo Artur Grahl

Integração Contínua com Rational Team Concert, Jenkins e SonarQube

2 INTRODUÇÃO. Construindo aplicações jcompany com Maven

Fundamentos da Plataforma Java EE. Prof. Fellipe Aleixo

Programação para Dispositivos Móveis

Tércio Oliveira de Almeida. TCC - Nexus - RAS

Construindo portais com Plone

Criar uma aplicação JPA2 com EclipseLink e H2

Desenvolvimento de um aplicativo básico usando o Google Android

Testes de Software. Anne Caroline O. Rocha TesterCertified BSTQB NTI UFPB. Anne Caroline O. Rocha Tester Certified BSTQB NTI UFPB

quinta-feira, 6 de agosto de 15 Buildout

Projeto de Software Orientado a Objeto

Adotando OpenEdge Architect. Luciano Oliveira Sr. Instructor, Consultant Global Field Services

Plugins TerraView. Última revisão: 12/12/32006 Versão TerraLib: 3.1.4

Capítulo 4. Packages e interfaces

IV Mostra de Tecnologia do Ministério Público Brasileiro. Arquitetura de referência para aplicações Web MPPE

J820. Integração Contínua. com CVS, CruiseControl, Cruise Control. argonavis.com.br. AntHill Gump e Helder da Rocha (helder@acm.

Manual de Compilación

INTRODUÇÃO AO DESENVOLVIMENTO DE JOGOS COM LIBGDX. Vinícius Barreto de Sousa Neto

Configure seu Linux pela Web! Instalação à partir de um.tar.gz. Autor: Carlos Eduardo Ribeiro de Melo <eduardo at unisulma.edu.br> Data: 05/10/2004

Um pouco do Java. Prof. Eduardo

Sintaxe Básica de Java Parte 1

Software Adobe DreamWeaver. Requisitos para criar aplicações Web

Tutorial: Criando aplicações J2EE com Eclipse e jboss-ide

Progress Exchange 2007

Utilizando subversion como controle de versão

Curso Superior de Banco de Dados

Maven 2. Versão 1.0. Apostila destinada ao curso com carga horária de 16 (dezesseis) horas

Tutorial RMI (Remote Method Invocation) por Alabê Duarte

Linguagem de Programação III

Programação online em Java

Migrations for Java EVOLUINDO SEU BANCO DE MANEIRA INCREMENTAL

3 Gerenciamento. 3.1.Build Automatizado

Desenvolvimento Web com Framework Demoiselle versão 1.0

Demoiselle Report Guide. Demoiselle Report. Marlon Carvalho. Rodrigo Hjort. Robson Ximenes

ARQUITETANDO E EVOLUINDO. um erp para a nuvem

Java - Introdução. Professor: Vilson Heck Junior. vilson.junior@ifsc.edu.br

Engenharia de Software. Enunciado da Primeira Parte do Projecto

SELENIUM 28/03/2011. Márcio Delamaro Harry Trinta

Construindo portais com Plone. Módulo 11 Pacote Policy

Universidade da Beira Interior

Empacotar o software TI-Nspire com o Microsoft SMS 2003

ARQUITETURA DO SISTEMA ERP PEGASUS

TDD. Se você é leitor da MundoJ ou alguma outra revista, em aplicações Java EE com JBoss Arquillian

SCE-557. Técnicas de Programação para WEB. Rodrigo Fernandes de Mello

Editor Eclipse para Programas F

Livro de Receitas. Modelação Engenharia de Software Sistemas Distribuídos Versão 1.1. Framework de aplicações com Web Services

Paradigmas da Programação Netbeans UML

Leonardo Gresta Paulino Murta

Prof. M.Sc. Fábio Procópio Prof. M.Sc. João Maria Criação: Fev/2010

Processo de Desenvolvimento

Flaviano José Angeli. Orientador: Dalton Solano dos Reis

Computação II Orientação a Objetos

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento Eclipse Introdução à Linguagem de Programação JAVA

Integrando Flex + Java + BlazeDS

Transcrição:

Introdução ao Maven Leonardo Gresta Paulino Murta leomurta@ic.uff.br

Sistemas de Gestão de Construção Controla a transformação de itens fonte em itens derivados Faz a gestão de dependências dos módulos envolvidos Evita compilações desnecessárias Calcula transigvamente as dependências Leonardo Murta Introdução ao Maven 2

Sistemas de Gestão de Construção Make (1979) Ant (2000) Maven (2004) Leonardo Murta Introdução ao Maven 3

Ant x Maven Ant Fortemente baseada em configuração Procedural Processo de construção e ferramentas uglizadas ficam misturados Maven Convenção sobre Configuração DeclaraGvo Existência de um processo padrão Ferramentas padrões dependentes do Gpo de empacotamento Leonardo Murta Introdução ao Maven 4

Elementos básicos POM (Project Object Model) Descritor XML da estrutura de um projeto Ciclo de vida (lifecycle) Processo de construção Ex.: compile à test à package à install à deploy Fase (phase) Passo do processo de construção Ex.: compile Plug- in Ferramenta uglizada no processo de construção Ex.: scm Meta (goal) Funcionalidade provida por uma ferramenta Ex.: scm:checkin Leonardo Murta Introdução ao Maven 5

Elementos básicos Ciclo de vida 1 * Fase * 1 Meta * 1 Plug- in Leonardo Murta Introdução ao Maven 6

Ciclo de Vida x Fase x Meta Fase 1 Meta 1 Meta 2 Plugin 1 Fase 2 Meta 1 Fase 3 Fase N Meta 2 Meta 3 Plugin 2 Ciclo de Vida Leonardo Murta Introdução ao Maven 7

Funcionalidades do Maven Geração da estrutura do projeto Gestão do processo de construção Gestão de dependências UGlização de repositório organizacional Geração do site do projeto Leonardo Murta Introdução ao Maven 8

Geração da Estrutura do Projeto Problema: Onde cada artefato do projeto deve ser colocado? Maven permite gerar o esqueleto do projeto (layout) aderente às suas convenções Fornece 292 layouts, dentre eles: Aplicação Java, Groovy, Ruby, Scala Site web Documento DocBook e LaTeX Maven Archetype (ou seja, é possível criar o seu próprio layout) Leonardo Murta Introdução ao Maven 9

Geração da Estrutura do Projeto (exemplo de geração) $ mvn archetype:generate [80: remote -> maven-archetype-quickstart (An archetype which contains a sample Maven project.)] Define value for property 'groupid': : uff Define value for property 'artifactid': : teste Define value for property 'version': 1.0-SNAPSHOT: Define value for property 'package': uff: O que foi gerado? pom.xml src/main/java/uff/app.java src/test/java/uff/apptest.java Leonardo Murta Introdução ao Maven 10

Geração da Estrutura do Projeto (geração no Eclipse) Leonardo Murta Introdução ao Maven 11

Geração da Estrutura do Projeto (geração no NetBeans) Leonardo Murta Introdução ao Maven 12

Geração da Estrutura do Projeto (pom.xml) <project > <modelversion>4.0.0</modelversion> <groupid>uff</groupid> <artifactid>teste</artifactid> <version>1.0-snapshot</version> <packaging>jar</packaging> <name>teste</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceencoding>utf-8</project.build.sourceencoding> </properties> <dependencies> <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project> Leonardo Murta Introdução ao Maven 13

Geração da Estrutura do Projeto (edição do POM no Eclipse) Leonardo Murta Introdução ao Maven 14

Geração da Estrutura do Projeto (edição do POM no NetBeans) Leonardo Murta Introdução ao Maven 15

Geração da Estrutura do Projeto (src/main/java/uff/app.java) package uff; /** * Hello world! * */ public class App { public static void main( String[] args ) { System.out.println( "Hello World!" ); } } Leonardo Murta Introdução ao Maven 16

Geração da Estrutura do Projeto (src/test/java/uff/apptest.java) package uff; import junit.framework.test; import junit.framework.testcase; import junit.framework.testsuite; /** * Unit test for simple App. */ public class AppTest extends TestCase { () } /** * Rigourous Test :-) */ public void testapp() { asserttrue( true ); } Leonardo Murta Introdução ao Maven 17

Geração da Estrutura do Projeto (convenção geral de estrutura) src/main/java Código fonte da aplicação (no exemplo, código java) src/main/webapp Código fonte da aplicação web src/main/resources Recursos da aplicação (imagens, sons, etc.) src/test/java Código de teste (no exemplo, testes junit) src/test/resources Recursos de teste src/site Site do projeto target Diretório com arquivos gerados pelo processo de build LICENSE.txt Licença do projeto README.txt Visão geral do projeto pom.xml Descritor Maven do projeto Leonardo Murta Introdução ao Maven 18

Funcionalidades do Maven Geração da estrutura do projeto Gestão do processo de construção Gestão de dependências UGlização de repositório organizacional Geração do site do projeto Leonardo Murta Introdução ao Maven 19

Gestão do Processo de Construção Problema: Como posso construir o projeto? Maven permite uglizar um processo padrão para construção do projeto Processo composto das seguintes fases (dentre outras): Compilação Testes Empacotamento Leonardo Murta Introdução ao Maven 20

Gestão do Processo de Construção (exemplo de compilação) $ mvn compile [INFO] Scanning for projects [INFO] --------------------------------------------------------------- [INFO] Building teste [INFO] task-segment: [compile] [INFO] --------------------------------------------------------------- [INFO] [compiler:compile {execution: default-compile}] [INFO] Compiling 1 source file to C:\Users\leomurta\workspace\teste \target\classes [INFO] --------------------------------------------------------------- [INFO] BUILD SUCCESSFUL [INFO] --------------------------------------------------------------- [INFO] Total time: 3 seconds [INFO] Finished at: Sat Oct 16 11:47:39 BRT 2010 [INFO] Final Memory: 15M/130M [INFO] --------------------------------------------------------------- Leonardo Murta Introdução ao Maven 21

Gestão do Processo de Construção $ mvn test (exemplo de teste) [INFO] [compiler:compile {execution: default-compile}] [INFO] Nothing to compile - all classes are up to date [INFO] [compiler:testcompile {execution: default-testcompile}] [INFO] Compiling 1 source file to target\test-classes [INFO] [surefire:test {execution: default-test}] [INFO] Surefire report directory: C:\Users\leomurta\workspace\teste \target\surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running uff.apptest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.049 sec Leonardo Murta Introdução ao Maven 22

Gestão do Processo de Construção $ mvn package (exemplo de empacotamento) [INFO] [compiler:compile {execution: default-compile}] [INFO] Nothing to compile - all classes are up to date [INFO] [compiler:testcompile {execution: default-testcompile}] [INFO] Nothing to compile - all classes are up to date [INFO] [surefire:test {execution: default-test}] [INFO] Surefire report directory: target\surefire-reports [INFO] [jar:jar {execution: default-jar}] [INFO] Building jar: target\teste-1.0-snapshot.jar Leonardo Murta Introdução ao Maven 23

Gestão do Processo de Construção (integração com o Eclipse) Leonardo Murta Introdução ao Maven 24

Gestão do Processo de Construção (integração com o NetBeans) Leonardo Murta Introdução ao Maven 25

Gestão do Processo de Construção (fases mais comuns) validate: verifica se o projeto está correto e se os dados estão disponíveis compile: compila o código do projeto test: executa testes de unidade package: empacota o código compilado em um formato apropriado (ex.: jar) integra8on- test: implanta o pacote em um ambiente apropriado e executa testes de integração verify: executa verificações de qualidade sobre o pacote install: instala o pacote no repositório local deploy: disponibiliza o pacote em um repositório remoto clean: remove artefatos criados por processos anteriores de construção site: gera o site do projeto Leonardo Murta Introdução ao Maven 26

Funcionalidades do Maven Geração da estrutura do projeto Gestão do processo de construção Gestão de dependências UGlização de repositório organizacional Geração do site do projeto Leonardo Murta Introdução ao Maven 27

Gestão de Dependências Problema: Como lidar com situações onde o projeto depende de bibliotecas externas? Maven permite definir dependências para um projeto As dependências são definidas no pom.xml O Maven calcula as dependências considerando transigvidade As dependências são baixadas de repositórios centrais por demanda Leonardo Murta Introdução ao Maven 28

Gestão de Dependências (definindo dependência no pom.xml) <project > <dependencies> <dependency> <groupid>axis</groupid> <artifactid>axis</artifactid> <version>1.4</version> <scope>compile</scope> </dependency> <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project> Leonardo Murta Introdução ao Maven 29

Gestão de Dependências (vendo dependências transigvas) $ mvn dependency:tree [INFO] [dependency:tree {execution: default-cli}] [INFO] uff:teste:jar:1.0-snapshot [INFO] +- axis:axis:jar:1.4:compile [INFO] +- org.apache.axis:axis-jaxrpc:jar:1.4:compile [INFO] +- org.apache.axis:axis-saaj:jar:1.4:compile [INFO] +- axis:axis-wsdl4j:jar:1.5.1:runtime [INFO] +- commons-logging:commons-logging:jar:1.0.4:runtime [INFO] \- commons-discovery:commons-discovery:jar:0.2:runtime [INFO] \- junit:junit:jar:3.8.1:test Leonardo Murta Introdução ao Maven 30

Gestão de Dependências (vendo dependências no Eclipse) Leonardo Murta Introdução ao Maven 31

Gestão de Dependências (vendo dependências no NetBeans) Leonardo Murta Introdução ao Maven 32

Gestão de Dependências (compilando com dependências) $ mvn compile Downloading: http://repo1.maven.org/maven2/axis/axis/1.4/axis-1.4.pom Downloading: http://repo1.maven.org/maven2/axis/axis-jaxrpc/1.4/axisjaxrpc-1.4.pom Downloading: http://repo1.maven.org/maven2/axis/axis-saaj/1.4/axissaaj-1.4.pom Downloading: http://repo1.maven.org/maven2/axis/axis-wsdl4j/1.5.1/axiswsdl4j-1.5.1.pom Downloading: http://repo1.maven.org/maven2/axis/axis/1.4/axis-1.4.jar [INFO] [compiler:compile {execution: default-compile}] [INFO] Compiling 1 source file to target\classes Leonardo Murta Introdução ao Maven 33

Funcionalidades do Maven Geração da estrutura do projeto Gestão do processo de construção Gestão de dependências U8lização de repositório organizacional Geração do site do projeto Leonardo Murta Introdução ao Maven 34

UGlização de Repositório Organizacional Problema: Como disponibilizar para outros projeto bibliotecas criadas na própria organização? Maven permite definir repositórios que pertencem à organização Funcionam como cache dos repositórios centrais Permitem que qualquer projeto Maven seja publicado no repositório Permitem que projetos Maven acessem suas bibliotecas Leonardo Murta Introdução ao Maven 35

UGlização de Repositório Organizacional (topologia) Empresa X Computador A Rep. local Computador B Rep. local Repositório Organizacional Internet Repositório Central Repositório Empresa Y Leonardo Murta Introdução ao Maven 36

UGlização de Repositório Organizacional (comandos install e deploy) Empresa X Computador A espaço de trabalho mvn install Repositório Organizacional Rep. local mvn deploy Leonardo Murta Introdução ao Maven 37

UGlização de Repositório Organizacional (instalação do Nexus) Leonardo Murta Introdução ao Maven 38

UGlização de Repositório Organizacional <project > <distributionmanagement> <snapshotrepository> <id>repo-gems-snapshot</id> (configuração do POM) <name>repositorio de Snapshots</name> <url>http://sel.ic.uff.br/nexus/content/repositories/snapshots</url> </snapshotrepository> <repository> <id>repo-gems</id> <name>repositorio de Releases</name> <url>http://sel.ic.uff.br/nexus/content/repositories/releases</url> </repository> </distributionmanagement> </project> Leonardo Murta Introdução ao Maven 39

UGlização de Repositório Organizacional (configuração do ~/.m2/sesngs.xml) <settings > <mirrors> <mirror> <id>gems</id> <mirrorof>*</mirrorof> <url>http://sel.ic.uff.br/nexus/content/groups/public</url> </mirror> </mirrors> <servers> <server> <id>repo-gems-snapshot</id> <username>deployment</username> <password>******</password> </server> <server> <id>repo-gems</id> </server> </servers> Leonardo Murta Introdução ao Maven 40

UGlização de Repositório Organizacional (implantação de biblioteca) $ mvn deploy [install:install] Installing target\teste-1.0-snapshot.jar to C:\Users\leomurta \.m2\repository\uff\teste\1.0-snapshot\teste-1.0-snapshot.jar [deploy:deploy] Uploading: http://sel.ic.uff.br/nexus/content/repositories/snapshots/ uff/teste/1.0-snapshot/teste-1.0-20101017.024638-1.jar Uploading repository metadata for: 'artifact uff:teste' Uploading project information for teste 1.0-20101017.024638-1 Uploading repository metadata for: 'snapshot uff:teste:1.0-snapshot Leonardo Murta Introdução ao Maven 41

UGlização de Repositório Organizacional (biblioteca implantada) Leonardo Murta Introdução ao Maven 42

UGlização de Repositório Organizacional (implantação de biblioteca) $ mvn compile Downloading: http://sel.ic.uff.br/nexus/content/groups/public/axis/ axis/1.4/axis -1.4.pom 2K downloaded (axis-1.4.pom) Downloading: http://sel.ic.uff.br/nexus/content/groups/public/axis/ axis-jaxrpc/1.4/axis-jaxrpc-1.4.pom 280b downloaded (axis-jaxrpc-1.4.pom) Downloading: http://sel.ic.uff.br/nexus/content/groups/public/axis/ axis-saaj/1.4 /axis-saaj-1.4.pom 278b downloaded (axis-saaj-1.4.pom) Downloading: http://sel.ic.uff.br/nexus/content/groups/public/axis/ axis-wsdl4j/1.5.1/axis-wsdl4j-1.5.1.pom 149b downloaded (axis-wsdl4j-1.5.1.pom) Leonardo Murta Introdução ao Maven 43

Funcionalidades do Maven Geração da estrutura do projeto Gestão do processo de construção Gestão de dependências UGlização de repositório organizacional Geração do site do projeto Leonardo Murta Introdução ao Maven 44

Geração do Site do Projeto Problema: Como criar um site com dados técnicos sobre o projeto? Maven permite gerar automagcamente um site com os dados principais do projeto Equipe Bibliotecas uglizadas Resultados dos testes Repositório de código fonte Repositório de solicitações de modificação Leonardo Murta Introdução ao Maven 45

Geração do Site do Projeto $ mvn site [INFO] [site:site {execution: default-site}] [INFO] artifact org.apache.maven.skins:maven-default-skin: checking for updates from central [INFO] Generating "About" report. [INFO] Generating "Issue Tracking" report. [INFO] Generating "Project Team" report. [INFO] Generating "Dependencies" report. [INFO] Generating "Continuous Integration" report. [INFO] Generating "Source Repository" report. [INFO] Generating "Project License" report. [INFO] Generating "Mailing Lists" report. [INFO] Generating "Plugin Management" report. [INFO] Generating "Project Summary" report. Leonardo Murta Introdução ao Maven 46

Geração do Site do Projeto Leonardo Murta Introdução ao Maven 47

Referências Sonatype, 2008, Maven: The DefiniGve Guide, O Reilly Walter dos Santos Filho, 2008, Introdução ao Apache Maven, Eteg Tecnologia da Informação Ltda hvp://maven.apache.org Leonardo Murta Introdução ao Maven 48

Introdução ao Maven Leonardo Gresta Paulino Murta leomurta@ic.uff.br