cursinho de maven

Upload: dan-nascimento

Post on 03-Mar-2018

252 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/26/2019 Cursinho de Maven

    1/16

    Qualidade de software, por quem realmente entende de software

    O bom programador

    Incio Livros cursos Ferramentas Palestras gravadas Frum Sobre

    segunda-feira, 9 de junho de 2014

    Curso Maven Pro: Lio 1 - "Odeio Maven!"

    Bem vindo(a) ao nosso curso de Maven "Maven Pro". Aqui, voc vai aprender gratuitamente como usar o Maven para criar, compilar, testar e

    distribuir seus projetos Java, de forma simples e prtica. Esta a primeira lio do curso (total de 3), e composta por:Demonstrao (vdeo),Texto e Exerccio.

    Antes de comear, assista ao vdeo demonstrativoda lio!

    Viso geral sobre o Maven, como us-lo adequadamente;

    Demonstrao de criao e compilao de um projeto simples;

    Anlise de um "pom.xml" bsico;

    Dependncias e repositrios;

    Maven no eclipse;

    Processo de transformao de um projeto normal em Maven;

    Lio 1: Odeio Maven

    1 de 16

  • 7/26/2019 Cursinho de Maven

    2/16

    Exerccio.

    Uma ferramenta para criar e compilar projetos Java;

    Uma ferramenta para gerir dependncias em projetos Java;

    O Apache Maven (http://maven.apache.org/) pode ser definido por essas duas afirmativas. exatamente o que ele e para que ele serve.Antes do Maven, ns usvamos coisas como GNU Make, ou no caso do Java, Apache Ant para configurar e compilar projetos.

    claro que voc pode usar a prpria IDE para isso, porm, isso diminui a sua portabilidade, em outras palavras, TODOS os desenvolvedoresdevem utilizar a mesma IDE, com os mesmos plugins, na mesma verso.

    Alm disso, a obrigatoriedade de uso de uma IDE impede a compilao automatizada, que ocorre em Servidores de Integrao Contnua.

    Um projeto Maven uma pasta, que contm um arquivo pom.xml e um diretrio de cdigo-fonte (src). Esse arquivo gerencia todas as

    dependncias do Projeto e permite constru-lo, empacot-lo, analis-lo e entreg-lo automaticamente.Eis um exemplo de pom.xml:

    4.0.0

    com.exemplo.projetoteste

    projetoteste

    jar

    1.0-SNAPSHOT

    projetoteste

    http://maven.apache.org

    junit junit

    3.8.1

    test

    A princpio, o Maven parece complicado, com todas as suas fases, plugins, repositrios e dependncias, porm, com o tempo, voc se acostumacom ele.

    5 Razes para usar um gestor de build:

    Tornar o projeto independente da IDE;1.

    Tornar o projeto "porttil";2.

    Gerenciar as dependncias;3.

    Ter uma interface nica para construir o projeto;4.

    Permitir a compilao atravs de ferramentas automticas (Continuum, Hudson, Cruise Control, JBE etc);5.

    O que o Maven?

    2 de 16

  • 7/26/2019 Cursinho de Maven

    3/16

    Existem vrios tipos de projeto Java diferentes, cada um com suas caractersticas, dependncias, ambiente e empacotamento prprios. Alm disso,

    cada um utiliza verses diferentes de componentes, que so as dependncias, cujas classes devem estar nos classpaths de: Compilao, Teste eExecuo.

    Se voc utiliza uma IDE, tudo isso fica meio transparente. s escolher o tipo de projeto que quer criar e os plugins da IDE fazem o resto. Porm,

    isso, como j vimos, torna seu projeto dependente da prpria IDE. O Maven abstrai isso tudo atravs das caractersticas:

    Uso de arqutipos de projeto;

    Gesto de dependncias e versionamento;

    Ciclo de vida de build padronizado.

    Sempre que voc vai criar um projeto, tem que gerenciar as dependncias. Em outras palavras, tem que colocar no classpath todas as bibliotecasnecessrias para compilar e rodar seu projeto, certo? Alm disso, pode ter que fazer algumas configuraes, por exemplo: Verso do Java,codificao de caracteres do cdigo-fonte, configuraes do Container (se for um projeto Java EE) etc.

    Um arqutipo Maven j faz isso para voc. Existem arqutipos prontos para vrios tipos de projeto, e eles so utilizados para criar projetos, criandoo pom.xml, com as dependncias bsicas, e toda a estrutura de pastas necessrias.

    No Maven no existe esse papo de criar uma pasta lib e colocar jars dentro dela. Isso se chama engravidar o projeto, e uma prtica ruim,pois:

    Voc tem que armazenar os jars junto com o cdigo-fonte do projeto, no repositrio SCM (Git, SVN, CVS etc);1.

    Voc no sabe se as verses dos jars esto adequadas;2.

    Pode gerar conflito no Classpath, caso o Container tambm possua as mesmas dependncias;3.

    Para o Maven, cada Projeto um Artefato, que pode ser compilado, empacotado e armazenado em um repositrio de artefatos. Um Projetogera um arquivo war / ear / jar, que identificado pelas Coordenadas Maven: GroupId, ArtifactIde Version.Cada Projeto Maven pode ter dependncias, necessrias para compil-lo e execut-lo. Essas dependncias devem estar presentes no classpath.

    E essas dependncias, por sua vez, tambm so Projetos Maven, ou Artefatos, que possuem Coordenadas Maven.As dependncias ficam armazenadas em um repositrio de Artefatos Maven, e seu projeto as copia (ou aponta para elas) em seu classpath no

    momento da compilao ou execuo.E, como essas Coordenadas Maven incluem a verso (version), voc no corre o risco de usar dependncias de verses incorretas.

    O Maven impe alguns padres. Isso no ruim, pois nos ajuda a organizar nosso projeto de tal forma que ele se torna realmente porttil. Voc

    pode no conhecer o projeto, mas saber como compil-lo e test-lo.Entre esses padres, est o Ciclo de Vida de Build (ou Construo), que inclui fases distintas, por exemplo:

    validate valida o projeto sem compilar;

    compile compila o cdigo-fonte;

    test executa os testes do projeto;

    package empacota o executvel para distribuio (JAR);

    integration-test testes de integrao;

    verify executa verificaes sobre o cdigo-gerado;

    install instala o pacote no repositrio maven;

    deploy instala o pacote no repositrio corporativo.

    E existem fases avulsas, como a clean, que limpa a pasta binria target, onde o Maven coloca o resultado de tudo o que ele faz.

    As fases formam uma sequncia e, quando os resultados de uma fase anterior no existem, sero gerados. Por exemplo, se rodarmos o comandomvn clean package, o maven vai:

    Limpar o contedo da pasta /target;1.

    Executar a fase validate;2.

    Executar a fase compile;3.Executar a fase test-compile, para compilar os cdigos de teste (pasta src/test/java);4.

    Arqutipos

    Gesto de dependncias e versionamento

    Ciclo de vida de build padronizado

    3 de 16

  • 7/26/2019 Cursinho de Maven

    4/16

    Executar a fase test;5.

    Executar a fase package;6.

    O maven impe uma estrutura para organizar o projeto;

    O maven impe coordenadas prprias;

    O maven impe uma interface de comandos prpria;

    O maven muda a nossa maneira de trabalhar.

    No insista em desobedecer ao Maven. Se voc no concorda com os padres que ele impe, ento evite us-lo. Os principais problemas socausados por atitudes como:

    Continuar enfiando jars dentro do projeto (dependncias com escopo system);

    Deixar de atualizar a verso do projeto;

    Usar verso internal ao invs de -SNAPSHOT, mesmo durante o desenvolvimento;

    Usar apenas repositrios locais ao invs de centrais;

    Um projeto Maven gera um Artefato Maven, que empacotado como ear, war ou jar, dependendo do tipo de empacotamento do projeto.Um projeto Maven uma pasta com um arquivo pom.xml e uma subpasta com o cdigo-fonte (src). No tem arquivos ocultos, como .settings,.project ou .classpath.

    Um projeto Maven pode ser criado com base em um Arqutipo, que j traz um modelo de projeto, com dependncias e configuraes.Um projeto Maven pode possuir dependncias de outros Artefatos Maven, que so identificados por suas Coordenadas Maven.

    Todo projeto Maven gera um Artefato Maven, que identificado por 3 coordenadas:groupId: Identificao da empresa e do sistema aplicativo ao qual o Artefato pertence;

    artifactId: Identificao deste artefato em particular. Deve ser nico dentro do mesmo GroupId;

    version: Verso do artefato.

    O maven usa um repositrio centralizado, e todos os componentes so acessados a partir dele. Logo, preciso evitar conflitos de nomenclaturas.O groupId como um namespace do C++. A conveno usar:

    Nome de domnio da Empresa criadora ao contrrio: com.obomprogramador;a.

    Nome do grande sistema aplicativo, ao qual o projeto pertence: metricas;b.

    Nem todos seguem o mesmo padro, e, frequentemente vemos groupIds estranhos. Evite isso.

    Cada Projeto Maven gera um nico artefato. Logo, seu nome deve identific-lo univocamente dentro daquele mesmo groupId. No podemos ter

    dois projetos Maven como mesmo artifactId dentro do mesmo groupId. Um exemplo seria:

    groupId: com.obomprogramador.metricas

    artifactId: validador;

    Esta a coordenada mais polmica, pois os desenvolvedores, em geral, no sabem versionar seus projetos. Esta coordenada a verso atual do

    Projeto Maven e do Artefato que ele gera.Podem coexistir vrias verses do mesmo artefato.

    A praxe de controle de verso : MM.mm.rr, onde:

    MM - Major version: Verso principal do software. Assume-se que existam diferenas funcionais significativas entre artefatos cujas

    verses principais sejam diferentes. Por exemplo: de 1.x.x para 2.x.x;

    mm - Minor vesion: Verso segundria do software. Existem aprimoramentos, porm, existe compatibilidade. Pode ser tambm um

    Lies importantes sobre o maven

    Conceitos fundamentais

    Um projeto Maven

    Coordenadas Maven

    groupId

    artifactId

    version

    4 de 16

  • 7/26/2019 Cursinho de Maven

    5/16

    milestone de correo de vrios bugs;

    rr - Revision: Geralmente usado para bug fix, sem diferenas significativas.

    As verses podem variar conforme o estado do Artefato:

    internal: O Artefato est liberado para uso, ou seja, considerado como finalizado. Podemos ter vrias verses do mesmo artefato,todas finalizadas. Exemplo: 1.1.5, 1.1.6;

    snapshot: O Artefato (ou aquela verso especfica) est em desenvolvimento, logo, est em evoluo. Isso significa que aquele

    pacote do Artefato uma viso temporria, que pode ter mudado. Indicamos que a verso de desenvolvimento ao acrescentar o

    sufixo: -SNAPSHOT. Por exemplo, considere dois pacotes do mesmo artefato, com as verses:1.1.3: Verso internal, ou seja, liberada para uso;

    1.1.4-SNAPSHOT: Verso snapshot, ou seja, a verso 1.1.4 ainda est em desenvolvimento, e esta uma foto de uma

    de suas compilaes;

    Alguns desenvolvedores acrescentam outros sufixos verso internal, de modo a marcar milestones, por exemplo:

    1.1.4-rc1: uma verso liberada, mas corresponde ao primeiro Release Candidate, ou seja, uma verso considerada aprovada paraliberao geral;

    1.1.4-final: a verso final liberada da verso 1.1.4 do artefato.

    Uma dependncia um Artefato Maven (criado por um Projeto Maven) que deve estar no classpath de um projeto.

    As dependncias ficam armazenadas em um repositrio de artefatos Maven.

    No momento da compilao, o Maven busca as dependncias do repositrio e as coloca no classpath.

    J t ficando um saco, no? Um monte de bl-bl-bl sem nenhuma prtica, caraca! Ento vambora fazer alguma coisa!

    Para o Maven funcionar necessrio que voc tenha:

    O Java JDK instalado. Ateno: No serve o JRE!

    O Maven instalado;

    Para esse curso, vamos usar o JDK 7. Se voc quiser usar o JDK 6 ou 5, sem problemas, s se lebre de configurar a verso do Javaadequadamente. Ns sempre vamos usar verso 1.6.

    Antes de sair instalando, cara, verifique se voc j tem o javac instalado. Abra um terminal, ou command prompt e digite: javac -version. Seno der erro, ento t na boa.

    Ubuntu:

    sudo apt-get install openjdk-7-jdk

    Fedora, Red Hat:

    su -c "yum install java-1.7.0-openjdk-devel"

    Mac OSX:

    Open JDK 7:

    https://github.com/alexkasko/openjdk-unofficial-builds#openjdk-unofficial-installers-for-windows-linux-and-mac-os-x

    Oracle JDK 7:

    http://download.oracle.com/otn-pub/java/jdk/7u60-b19/jdk-7u60-macosx-x64.dmg

    Windows:

    Open JDK 7:

    https://github.com/alexkasko/openjdk-unofficial-builds#openjdk-unofficial-installers-for-windows-linux-and-mac-os-x

    Oracle JDK 7:

    http://www.oracle.com/technetwork/java/javase/downloads/index.html

    Dependncias

    Instale a parada toda!

    Instalando o Java JDK

    5 de 16

  • 7/26/2019 Cursinho de Maven

    6/16

    de praxe criar a varivel de ambiente JAVA_HOME:

    Linux:

    Altere /etc/profile e adicione: export JAVA_HOME=. Normalmente /usr/lib/jvm/openjdk...

    Altere /etc/bash.bashrc e adicione a mesma coisa;

    Mac OSX:

    Adicione JAVA_HOME dentro de ~/.MacOSX/environment.plist;

    Altere /etc/profile e adicione: export JAVA_HOME=.;

    Windows:

    Abra Computador, propriedades, escolha Configuraes avanadas do sistema, e clique em Variveis de ambiente. Criea varivel dentro da lista Variveis do sistema.

    Neste curso vamos usar o Maven 3.x, na ltima verso disponvel. Em nosso caso, a verso 3.2.1 (http://maven.apache.org/download.cgi).Porm, voc pode usar qualquer verso do Maven 3, por exemplo, a 3.1.1.

    Linux:

    apt-get update

    apt-get install ant maven3

    Mac OSX:

    brew install maven (se voc instalou o homebrew)

    sudo port install maven3 (se voc usar o mac ports)

    Windows:

    Baixe o maven e o extraia em algima pasta (http://maven.apache.org/download.cgi)

    Coloque a subpasta bin na varivel de ambiente path (veja o procedimento descrito anteriormente para JAVA_HOME);

    Crie duas variveis de ambiente: M2_HOME e M3_HOME, apontando para a pasta onde instalou o Maven. O Maven 3 tinha um bug que fazia

    com que ele usasse a varivel M2_HOME para apontar para a instalao dele. S que isso impedia a instalao de Maven 2 e Maven 3 namesma mquina. Por via das dvidas, crie as duas.

    A documentao do Maven, que PSSIMA, diz que a varivel M2_HOME (e M3_HOME) deve apontar para a pasta onde voc descompactou

    o Maven. S que os pacotes Linux copiam os arquivos para diretrios diferentes e, as vezes, separam os arquivos. Isso dificulta muito aconfigurao.H um entendimento que deveria ser a pasta onde o executvel do Maven (mvn) est instalado.

    Aps instalar o Maven, abra um terminal ou prompt de comandos e digite: mvn version, para testar. Verifique se a verso exibida a 3.2.1 (ou

    a ltima).

    Tudo instalado e pronto, certo? Ento vamos criar um projeto Maven e compil-lo. Para comear, vamos usar um Arqutipo padro, chamado:

    maven-quickstart-archetype, que j vem instalado no Maven.

    Vamos comear usando um terminal (ou prompt de comandos), depois eu vou mostrar como fazer isso no Eclipse.Crie uma pasta para trabalhar, copie e cole o comando abaixo:

    Linux / Mac:mvn archetype:generate \

    -DgroupId=com.exemplo.projetoteste \

    -DartifactId=projetoteste \

    -DarchetypeArtifactId=maven-archetype-quickstart \

    -DinteractiveMode=false

    Windows:mvn archetype:generate ^

    -DgroupId=com.exemplo.projetoteste ^

    -DartifactId=projetoteste ^

    -DarchetypeArtifactId=maven-archetype-quickstart ^

    -DinteractiveMode=false

    Instalando o Maven

    Agora sim!

    6 de 16

  • 7/26/2019 Cursinho de Maven

    7/16

    A nica diferena que o caractere de continuao de linha. Como o comando muito grande, melhor quebrar em vrias linhas.

    Vai... Tecla , numa boa!

    Voc criou um projeto Maven! Parabns! Vamos rever o comando que ns rodamos?

    mvn archetype:generate : Estamos rodando o Maven (comando mvn) e pedindo a ele para executar o goal generate (uma funo)

    de um plugin(uma biblioteca), chamado archetype. Este plugin lida com arqutipos e o goal generate gera um projeto com baseem um arqutipo;

    -DgroupId=com.exemplo.projetoteste e -DartifactId=projetoteste: Estamos passando duas propriedades (system properties) para a

    JVM, indicando o groupId do nosso projeto e o seu artifactId. Poderamos ter passado a version tambm, mas vamos deixar que ele

    assuma um valor default;

    -DarchetypeArtifactId=maven-archetype-quickstart: Estamos indicando qual o artifactId do arqutipo que queremos usar.

    Poderamos ter informado o archetypeGroupId tambm, mas, como esse um arqutipo default, isso no necessrio;

    -DinteractiveMode=false: Para no encher o saco com perguntas.

    Voc especificou o -DartifactId=projetoteste, certo? Ento, dentro da pasta onde rodou o comando, deve haver uma pasta com esse nome.Lembre-se que um projeto Maven uma pasta com um arquivo pom.xml e uma subpasta src contendo o cdigo-fonte.

    Se abrirmos esta pasta, veremos a seguinte estrutura:

    projetoteste

    |

    +-"pom.xml"|

    +-src

    |

    +-main

    | |

    | +-java

    | |

    | +-com

    | |

    | +-exemplo

    | |

    | +-projetoteste

    | |

    | +-App.java

    |

    +-test

    |

    +-java

    |

    +-com

    |

    +-exemplo

    |

    +-projetoteste

    |

    +-AppTest.java

    A pasta src dividida entre main e test, ambas com estrutura parecida. O cdigo-fonte funcional da aplicao fica na estrutura main e o

    cdigo de teste na estrutura test. Note que ele criou o caminho do pacote usando o groupId que informamos no comando, e, inclusive, criouduas classes: uma funcional (App.java) e uma de teste (AppTest.java).

    Mas... O que eu criei?

    7 de 16

  • 7/26/2019 Cursinho de Maven

    8/16

    Abra o arquivo pom.xml e veja seu contedo:

    4.0.0

    com.exemplo.projetoteste

    projetoteste

    jar

    1.0-SNAPSHOT

    projetoteste

    http://maven.apache.org

    junit

    junit

    3.8.1

    test

    Como podemos ver, as Coordenadas Maven do nosso Projeto esto definidas no pom.xml (groupId e artifactId), e ele gerou uma versoinicial para ns (1.0-SNAPSHOT). Note que ele configurou a verso como -SNAPSHOT, j que um novo projeto.

    Outra coisa que o Maven criou automaticamente foi uma dependncia para o junit, pois podemos quer testar nosso projeto e precisamos dessabiblioteca em nosso classpath de teste.

    Simples! Basta ir para a pasta onde est o arquivo pom.xml e digitar: mvn compile. O Maven vai compilar as classes funcionais (e no as de

    teste) e criar uma pasta target, com esse contedo:

    projetoteste

    |+-target

    |

    +-classes

    |

    +-com

    |

    +-exemplo

    |

    +-projetoteste

    |

    +-App.class

    E voc deve ter visto, na janela do terminal, o log de compilao do Maven, com esse final:

    [INFO] Compiling 1 source file to C:\Users\cleuton\target\classes[INFO] ------------------------------------------------

    [INFO] BUILD SUCCESS

    [INFO] ------------------------------------------------

    [INFO] Total time: 1.232 s

    [INFO] Finished at: 2014-06-05T12:55:47-03:00

    [INFO] Final Memory: 9M/122M

    [INFO] ------------------------------------------------

    Essa frase Build success uma das mais bonitas que eu j vi... D vontade de chorar! O problema, que ela no aparece em todo o build...

    Voc deve ter notado que a classe de teste (src/test/java...) no foi compilada, certo? Isso pode ser remediado com a fase test-compile, ou entomandando o maven testar o nosso projeto.

    Agora, rode o comando mvn clean package e observe o resultado:

    Ok, mas como eu compilo o projeto?

    Empacotando o artefato

    8 de 16

  • 7/26/2019 Cursinho de Maven

    9/16

    -------------------------------------------------------

    T E S T S

    -------------------------------------------------------

    Running com.exemplo.projetoteste.AppTest

    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.006 sec

    Results :

    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

    [INFO]

    [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ projetoteste ---

    [INFO] Building jar: C:\Users\cleuton\cursomaven\projetoteste\target\projeto

    teste-1.0-SNAPSHOT.jar

    [INFO] ------------------------------------------------------------------------

    [INFO] BUILD SUCCESS

    [INFO] ------------------------------------------------------------------------

    [INFO] Total time: 4.190 s

    [INFO] Finished at: 2014-06-05T13:01:24-03:00

    [INFO] Final Memory: 12M/127M

    [INFO] ------------------------------------------------------------------------

    Ele compilou e executou os testes usando o plugin surefire, que roda testes Junit. Como nosso projeto tem uma classe de teste (dentro desrc/test/java...), ele a executou. Legal, no?

    Ns encadeamos 2 fases, executadas em sequncia: clean, que limpa a pasta target, e package, que:

    Valida o pom.xml;

    Compila as classes funcionais, se no estiverem compiladas;

    Compila as classes de teste (fase test-compile);

    Executa os testes;

    Se tudo der certo, cria um jar e coloca na pasta target.

    Por que ele criou um jar? Porque o packaging do nosso projeto especificou isso. Procure no pom.xml e ver: jar. Ao

    criar o jar, ele deu o nome do artifactId e da verso, logo, ficou: projetoteste-1.0-SNAPSHOT.jar.

    Voc deve ter notado que o Maven fez alguns downloads de artefatos, no? O log est cheio deles, principalmente na primeira vez que voc

    rodar alguma das fases. Ele est indo nos repositrios remotos, entre eles o Repositrio Central do Maven (http://mvnrepository.com ), e baixandotudo o que no existe no Repositrio Local. Mas onde fica esse Repositrio Local?

    Todas as dependncias do seu Projeto Maven ficam armazenadas no repositrio de artefatos Maven local, da sua conta. Esse repositrio fica

    dentro da pasta oculta .m2, que fica dentro de:

    Linux / Mac: pasta home do usurio que est logado;

    Windows: C:\Usurios\;

    Abra essa pasta e veja o que tem dentro:

    Por exemplo, vamos pesquisar o Junit, que nossa dependncia:

    Repositrio Maven

    9 de 16

  • 7/26/2019 Cursinho de Maven

    10/16

    Os artefatos ficam armazenados em pastas, de acordo com o groupId, artifactId e version.

    do repositrio local que o Maven usa as dependncias necessrias para compilar seu projeto. Ele as coloca no classpath de compilao, e,quando necessrio testar, no classpath de teste. Ele no as copia para dentro do seu projeto, a no ser que ele seja um war, neste caso, ele

    copia para dentro da pasta WEB-INF/lib.

    Na janela terminal, na pasta onde est o pom.xml, rode o comando: mvn clean install e veja o resultado:

    -------------------------------------------------------

    T E S T S

    -------------------------------------------------------

    Running com.exemplo.projetoteste.AppTest

    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.006 sec

    Results :

    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

    [INFO]

    [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ projetoteste ---

    [INFO] Building jar: C:\Users\cleuton\cursomaven\projetoteste\target\projeto

    teste-1.0-SNAPSHOT.jar

    [INFO]

    [INFO] --- maven-install-plugin:2.4:install(default-install) @ projetoteste ---

    [INFO] Installing C:\Users\cleuton\cursomaven\projetoteste\target\projetotes

    te-1.0-SNAPSHOT.jar to C:\Users\cleuton\.m2\repository\com\exemplo\projetote

    ste\projetoteste\1.0-SNAPSHOT\projetoteste-1.0-SNAPSHOT.jar

    [INFO] Installing C:\Users\cleuton\cursomaven\projetoteste\pom.xml to C:\Users\cleuton\.m2\repository\com\exemplo\projetoteste\projetoteste\1.0-SNAPSHOT

    \projetoteste-1.0-SNAPSHOT.pom

    [INFO] ------------------------------------------------------------------------

    [INFO] BUILD SUCCESS

    [INFO] ------------------------------------------------------------------------

    [INFO] Total time: 2.197 s

    [INFO] Finished at: 2014-06-05T13:16:23-03:00

    [INFO] Final Memory: 13M/154M

    [INFO] ------------------------------------------------------------------------

    Ele fez tudo o que o package fez, e, ainda por cima, copiou o jar para dentro do seu repositrio local (a pasta .m2/repository). E, se formos

    fuar no repositrio, vamos achar o caminho: com/exemplo/projetoteste/projetoteste/1.0-SNAPSHOT. A partir de agora, nosso Artefato pode serusado como dependncia em outros Projetos Maven.

    Voc notou que, tanto no package como no install, eu usei o clean antes? Isso para garantir que o cdigo-fonte seja recompilado.

    Transformar um projeto normal em Maven fcil, porm, requer um certo trabalho. isso o que precisamos fazer:

    Criar o projeto vazio (com o mvn archetype:generate). Pode usar o arqutipo maven-quickstart-archetype mesmo);1.

    Copiar o cdigo-fonte funcional para dentro da pasta src/main/java;2.

    Copiar arquivos de configurao e propriedades para src/main/resources;3.

    Copiar o cdigo-fonte de teste para dentro da pasta src/test/java;4.

    Buscar as dependncias usando o site http://mvnrepository.com ;5.

    Configurar o pom.xml com as coordenadas das dependncias;6.

    Instalar as dependncias que no estejam no Repositrio Central Maven;7.

    Eliminar pastas lib que, porventura existam no Projeto.8.

    Vamos colocar seu Artefato no repositrio!

    Transformando um projeto normal em Maven

    10 de 16

  • 7/26/2019 Cursinho de Maven

    11/16

    Recursos

    Um projeto, geralmente, possui arquivos que no so cdigo-fonte, como:

    Arquivos de propriedades (log4j etc);

    Arquivos de configurao, em XML (Hibernate etc);

    Imagens.

    Estes arquivos devem ser carregados na raiz do classpath, para que voc possa us-los dentro do projeto Java. O Maven tem uma pasta padropara isso: src/main/resources, onde voc deve colocar os arquivos.Estes recursos sero copiados para dentro da pasta target/classes, mantendo a mesma estrutura de diretrios em que eles esto.

    Se voc tiver verses diferentes de recursos para testes, ento pode coloc-los na pasta src/test/resources. Quando for executado o teste, oMaven ir primeiro nessa pasta, antes de procurar na src/main/resources.

    Pesquisando dependncias

    O repositrio central do Maven no permite que pesquisemos nada nele. Ento, usamos o site http://mvnrepository.com para fazer isso. Por

    exemplo, pesquisei por Hibernate:

    Ele apresenta as dependncias de acordo com suas Coordenadas Maven, e podemos escolher qual verso desejamos. Depois, ele nos mostra aconfigurao da dependncia pronta para ser copiada e colada no pom.xml, dentro do tag .E se a dependncia no existir no repositrio?

    bem difcil que isso acontea... Porm, pode ser que exista um jar seu, que no foi enviado para o Repositrio Central, ento, temos asseguintes opes:

    Se tivermos acesso ao cdigo-fonte do jar, podemos convert-lo em um Projeto Maven e instal-lo no Repositrio Local;1.

    Se no tivermos acesso ao cdigo-fonte, ento podemos instalar o jar, com um pom.xml criado automaticamente, usando o comando:mvn install:install-file;

    2.

    mvn install:install-file -Dfile=your-artifact-1.0.jar \

    [-DpomFile=your-pom.xml] \

    [-Dsources=src.jar] \

    [-Djavadoc=apidocs.jar] \

    [-DgroupId=org.some.group] \

    [-DartifactId=your-artifact] \

    [-Dversion=1.0] \

    [-Dpackaging=jar] \

    [-Dclassifier=sources] \

    [-DgeneratePom=true] \

    [-DcreateChecksum=true]

    Boa pergunta! O Eclipse Kepler para desenvolvedores Java EE, j vem pronto para usar o Maven. Se voc tem uma outra verso, ento, pode ser

    necessrio instalar o plugin m2e no Eclipse. s instalar a partir do update site, que pode ser pesquisado em: http://eclipse.org/m2e/download/.

    Para saber se voc tem o m2e, s abrir a Janela Window / Preferences e ver se tem uma opo maven.

    E como eu uso no Eclipse?

    11 de 16

  • 7/26/2019 Cursinho de Maven

    12/16

    Voc pode, inclusive, importar o projeto que acabou de criar para dentro do Eclipse: file / import / maven / Existing maven projects e selecionar a

    pasta que contm a pasta do seu projeto.

    Note que o m2e tem um editor bonitinho para o pom.xml, que nos apresenta as dependncias e at a sua hierarquia.

    Antes de compilar seu projeto Maven no Eclipse, temos que configurar a Workspace para usar a nossa instalao do Maven. O m2e usa ummaven embedded com verso 3.0.4, que no a verso que estamos usando. Para isto, abra o menu window / preferences, selecione maven

    e installations, e acrescente a pasta onde instalou o Maven 3.2.1:

    Agora voc vai usar o Maven correto! S falta uma coisinha: verificar se o Eclipse est usando uma JDK! Abra o menu window / preferences eselecione Java e depois installed JREs. Se estiver rodando em uma JRE (o Eclipse tem compilador prprio) aponte para uma JDK:

    Clique com o boto direito sobre o seu projeto e selecione Run As Maven build...:

    12 de 16

  • 7/26/2019 Cursinho de Maven

    13/16

    Ento, voc vai conseguir executar um clean install exatamente como fizemos no terminal, e o log aparece na view console.

    Vrios goals padres do Maven j esto configurados no menu de contexto (Run as). S falta uma coisinha para fecharmos a lio: O menuMaven:

    Ao clicar com o boto direito sobre o projeto, voc deve ter notado um menu maven.... Este menu tem vrias opes interessantes, que permitemadicionar dependncias, plugins etc. O item mais importante o Update Project....

    Quando criamos um projeto Maven no Eclipse, ele cria uma pasta chamada Maven dependencies e organiza todas as suas dependncias, queesto no repositrio local. Bem, se voc mudar alguma coisa no pom.xml, essa lista fica desatualizada, ento, voc pode usar o Update project

    para reconfigurar isso. Sempre que voc alterar o pom.xml, seja para o que for, rode um Update dependencies.

    Ah, e muito importante: Se o seu projeto Maven, no use mais Project / clean! Use sempre: Run As Maven Clean, assim como Run As MavenPackage.

    Bom, vamos ver se voc aprendeu alguma coisa... Baixe o projeto que est no zip exercicio-licao1.zip. Descompacte, converta para Maven einstale no seu Repositrio Local. S isso.

    A resposta est no zip resposta-licao1.zip, caso voc pea penico.

    Porm, antes de pedir penico, leia as dicas que eu vou dar:

    Use o Eclipse, pois fica mais fcil;1.

    Crie uma Workspace e lembre-se de mudar 2 coisas:Aponte a JRE do Eclipse para sua JDK (window / preferences, depois Java e installed JREs);a.

    Aponte o Maven para a sua instalao (window / preferences, depois Maven e installations);b.

    2.

    Crie um projeto Maven no prprio Eclipse (file / new / other, depois Maven e Maven Project). Use o arqutipo maven-archetype-quickstart. simples, ele vai aparecer na lista de arqutipos;

    3.

    Para o groupId, use o nome do pacote java das classes que esto em src, e para artifactId, use WormJoint;4.

    Pode dar um problema com o pacote, pois o plugin m2e vai criar um pacote contendo o groupId e o artifactId, o que est diferente dasclasses. Voc escolhe: ou muda as classes de pacote ou renomeia os pacotes gerados. com voc!

    5.

    Exerccio

    13 de 16

  • 7/26/2019 Cursinho de Maven

    14/16

    Postado por Cleuton Sampaio s 03:41

    Marcadores: curso, Ferramentas, Integrao Contnua, maven

    Importe a classe WormJoint.java para src/main/java/... e a classe TesteWJ.java para src/test/java...;6.

    Abra a pasta lib e anote todos os jars que esto l. Voc dever procurar as dependncias no site http://mvnrepository.com . Parafacilitar, o nmero da verso j est no nome dos jars;

    7.

    Uma dica quanto ao FEST: H um pacote que j tem todos os outros como dependncias, logo, voc s precisa procurar um s, que : fest-

    swing;

    8.

    Eu recomendo que voc coloque trs propriedades no seu pom.xml:9.

    UTF-8

    1.61.6

    A propriedade project.build.sourceEncoding diz a codificao de caracteres utilizada no cdigo-fonte. Use sempre utf-8 e acostume-se a isso.Quando voc estiver usando o Eclipse, pode setar isso em window / preferences e Editors, alterando o Character Encoding do editor dearquivos textuais.

    As propriedades maven.compiler.source e maven.compiler.target alteram o valor de -source e -target passados para o plugin de compilao.

    Coloque sempre a verso do Java que pretende usar.

    http://www.obomprogramador.com/p/cursos.html

    http://www.obomprogramador.com/p/livros.html#qualidade

    Acompanhe as lies do curso Maven Pro:

    Aproveite e use o Maven profissionalmente

    +49 Recomende isto no Google

    14 de 16

  • 7/26/2019 Cursinho de Maven

    15/16

    18 comentrios

    Principais comentrios

    Cleuton Sampaio 1 ano atrs - O Bom Programador (Discusso)

    A primeira lio do nosso curso de Maven! Deixe de ser "noob"!

    +4

    Cleuton Sampaio 1 ano atrs - Compartilhada publicamente

    Curso Maven Pro: Lio 1 - "Odeio Maven!"

    Bem vindo(a) ao nosso curso de Maven "Maven Pro". Aqui, voc vai aprender gratuitamente como usar o Maven para criar,

    compilar, testar e distribuir seus projetos Java, de forma simples e prtica. Esta a primeira lio do curso (total de 3), e composta p...

    +3 Responder

    Cleuton Sampaio 1 ano atrs - O Bom Programador (Discusso)

    Ainda tem dvidas sobre Maven? Faa nosso curso gratuito!

    +1

    Fernando Basso 1 ano atrs - Compartilhada publicamente

    Muito boa essa primeira parte. Bem detalhada e com bastante contedo. Obrigado e parabns.

    +2 Responder

    Obrigado e aguarde o resto!

    Cleuton Sampaio 1 ano atrs

    Deleon Sousa 1 ano atrs - Compartilhada publicamente

    Exelente curso, muito detalhado e didatico. Valeu! Odeio Maven! kkkkkkk

    +1 Responder

    Paulo Dantas 10 meses atrs - Compartilhada publicamente

    Boa tarde Cleuton, gostei do curso, pena que no consegui fazer funcionar, ou seja criar o .war que funcione.

    Que pena! Esta dando este erro e eu no sei o que fazer!

    [INFO] Scanning for projects...

    Leia mais (19 linhas)

    Responder

    Daniel Monteiro (MontyOnTheRun)via Google+ 1 ano atrs - Compartilhada publicamente

    Cleuton Sampaiooriginalmente compartilhou isto

    Ainda tem dvidas sobre Maven? Faa nosso curso gratuito!

    +2 Responder

    Carlos Alberto Luciano Martins Guimares Guimaraesvia Google+ 3 meses atrs - Compartilhada publicamente

    Adicionar um comentrio

    15 de 16

  • 7/26/2019 Cursinho de Maven

    16/16

    Postagem mais recente Postagem mais antigaPgina inicial

    Assinar: Postar comentrios (Atom)

    Modelo Awesome Inc.. Tecnologia do Blogger.

    16 de 16