Páginas

Mostrando postagens com marcador Maven. Mostrar todas as postagens
Mostrando postagens com marcador Maven. Mostrar todas as postagens

quinta-feira, abril 26, 2012

Maven: múltiplos projetos interdependentes

Dando continuidade a temática que envolve maven, mais especificamente, de ferramentas para controle de dependências (artefatos) e build automático, vou abordar como se dá o trabalho e relação de múltiplos projetos no contexto do maven.

A necessidade de se utilizar múltiplos projetos para a construção de uma aplicação acarreta grandes vantagens, principalmente, quanto a melhores práticas e um melhor design arquitetural da aplicação; pois, assim, pode-se estabelecer de forma mais impositiva maior coesão e menor acoplamento. Em termos mais práticos, pode-se construir uma aplicação modularizada de forma bastante prática e eficaz.

Escopo
Deseja-se criar uma aplicação modular, onde as responsabilidades de persistência, negócio e visualização devem ser desacopladas. Adotaremos como solução a criação de 3 projetos, um para cada finalidade.

O diagrama, a seguir, ilustra a estrutura a ser criada:
Pelo diagrama, observa-se que a camada de View irá ter visibilidade (dependência) a camada de negócio e, esta última visibilidade a camada de dados/persistência.

Construção

Como já discutido nos posts anteriores sobre maven, este utiliza o arquivo pom.xml para estabelecer a estrutura, dependências e uma série de diretrizes inerentes ao build do projeto. Como visto no diagrama, entende-se, preliminarmente, que teremos 3 projetos que possuirão interdependência, logo 3 arquivos pom.xml, correspondentes a cada projeto individual.
Está correto, como uma ressalva: será necessário a criação do pom pai (parent pom.xml). Este arquivo pom não fará correspondência a nenhum projeto, será apenas um arquivo para a gerência macro dos 3 módulos.

O primeiro passo será a criação do parent pom, para tanto crie um arquivo no seu editor de textos simples e salve-o num diretório de sua preferência (este diretório que irá conter o projeto em seguida), com o nome de: pom.xml. Neste arquivo, cole o seguinte conteúdo:



  4.0.0

  com.serjava.app
  app
  1.0-SNAPSHOT
  pom

  
   
  

Observe que definimos o groupId como: com.serjava.app, e o nome de app ou artifactId como: app. Salve o arquivo, e vamos proceder a criação dos projetos.

No prompt de comando/terminal acesse o diretório onde o arquivo foi salvo, e crie os projetos como:

Projeto: app-web

Durante o processo de criação será solicitado uma versão, informe: 1.0 (snapshot); posteriormente, será apresentado um resumo das parametrizações, informe Y para confirmar e tecle enter.

Feito isto o projeto web já foi criado!

Façamos 2 observações:
Abra o arquivo pom.xml criado inicialmente, no diretório raiz do projeto, verifique que houve uma alteração:

Observe que um módulo foi imputado automáticamente, isto significa que: o projeto criado (app-web) será gerenciado, também, pelo parent pom!

A segunda observação é: abra o pom.xml do projeto criado: <<diretorio escolhido>>\app-web\pom.xml, e veja, dentre as demais tags de configuração a tag <parent>, esta faz referência ao parent pom (pom pai) criado inicialmente:

    app
    com.serjava.app
    1.0-SNAPSHOT
  

Projeto: app-business

A única diferença deste projeto para o primeiro foi a alteração do seu nome, e archetypeArtifactId para quickstart, pois é apenas um projeto para a lógica de negócios, não compreende estrutura web.

Projeto: app-dao

Neste momento deveremos dispor dos três projetos: web, business e dao, todos gerenciados pelo parent pom, criado incialmente! Verifique o arquivo pom parent, na tag module, deverá terem sido incluídas mais 2 módulos.

Os projetos já estão devidamente criados segundo o diagrama, resta-nos, agora, adicionar as dependências citadas. Conforme entendido, o projeto web terá visibilidade apenas ao projeto de business, portanto, teremos que adicionar a dependência. Abra o arquivo pom.xml do projeto app-web, e modifique-o como a seguir:

  4.0.0
  
    app
    com.serjava.app
    1.0-SNAPSHOT
  
  com.serjava.app
  app-web
  1.0
  war
  app-web Maven Webapp
  http://maven.apache.org
  

    
      com.serjava.app
      app-business
      1.0
      compile
    


    
      junit
      junit
      3.8.1
      test
    
  
  
    app-web
  

Observe que uma dependência foi incluída, referenciando-se aos dados de criação do projeto app-business, esta inclusão permitirá acesso chamada de métodos do projeto app-business, a partir do projeto app-web; assim, estaremos delegando toda a lógica de negócio desta fantástica aplicação a um projeto único e específico a isto, permitindo que o projeto web trate apenas de manipulações de pertinentes a visualização.

Finalmente, devemos adicionar a dependência do projeto dao ao projeto business. Ressalto que: o projeto business será para o processo de negócio e não persistência de dados (seja em database, arquivo, etc), para persistir temos o projeto específico de Data Access Object. Utilizando esta estrutura, assumimos que todos os detalhes e especificidades de acesso a dados estarão contidas no projeto DAO.

Edite o arquivo pom.xml do projeto app-business e inclua a seguinte dependência:

  4.0.0
  
    app
    com.serjava.app
    1.0-SNAPSHOT
  
  com.serjava.app
  app-business
  1.0
  app-business
  http://maven.apache.org
  

    
      com.serjava.app
      app-dao
      1.0
      compile
    


    
      junit
      junit
      3.8.1
      test
    
  


Concluída a edição nosso projeto poderá ser devidamente implementado, seguindo o fluxo: app-web faz uma requisição ao app-business, este, por sua vez, realiza a lógica de negócio e faz as chamadas necessárias para acesso aos dados, no app-dao.

Todos os arquivos devidamente salvos, testaremos o empacotamento, gerando um package, digite o seguinte comando no prompt/terminal, esteja ciente que está dentro do diretório pai, e não em algum projeto específico:

mvn clean package

O resultado esperado deverá ser:

Verifique BUILD SUCESS! Pronto, basta partir para a codificação.

Num post futuro, mostrarei como fazer o deploy de uma aplicação diretamente a um servidor web por meio do maven, não perca!

domingo, outubro 16, 2011

Maven: Configurar o proxy

Olá pessoal!

Como já devem ter acompanhado no post anterior, o uso do maven implica no download constante de artefatos e depedências, que serão utilizados pelo próprio maven na construção do projeto, bem como, pelo projeto a ser construído.

Comumente nos ambientes empresariais e educacionais verifica-se a existência de proxy. Se este não for devidamente configurado o maven, por certo, não fará a gerência completa de seu projeto, o que o deixará bastante nervoso!
Felizmente a configuração do proxy é bastante simples:
  1. Localize o diretório conf dentro da pasta de instação do maven em sua máquina;
  2. Edite o arquivo settings.xml, que deverá estar contido dentro do diretório acima especificado.
  3. Encontre a tag <proxies>, verifique as alterações abaixo:

    
      optional
      true
      http
      proxyuser
      proxypass
      proxy.host.net
      80
      local.net|some.host.com
       
  

As tags referem-se:
  • id: informe qualquer nome para identificar esta configuração de proxy;
  • active: true ou false, indica se esta configuração de proxy está ativa, portante deixaremos true;
  • protocol: indica qual protocolo estará submetido as configuração do proxy, deixemos http;
  • username: nome de usuário da rede, caso o proxy exija autenticação de usuário, do contrário a tag pode ser removida;
  • password: senha para autenticação junto ao proxy, se requerida, do contrário remova a tag;
  • host: informe o nome do host ou ip do servidor de proxy;
  • port: porta que o proxy utiliza;
  • nonProxyHosts: endereços que nao requeiram a passagem pelo proxy, geralmente: localhost
Realizadas as configurações descritas, salve o arquivo e seu proxy deverá estar devidamente configurado junto ao maven.

Maven: Primeiro Projeto

No post anterior abordei a configuração do Maven junto ao sistema operacional, declarando-se a variável de ambiente M2_HOME.

Demonstrarei o uso do Maven para a criação de um projeto simples, JSE, a fim de demonstrar a estrutura que o Maven adota como padrão bem como seu build.

Para a criação do projeto, basta acessar o prompt de comando. Assumiremos o diretório padrão como sendo c:\projetos-maven.


A partir da seguinte linha de comando, é possível  a criação do projeto, acesse pelo prompt o diretório acima discriminado ou aquele de sua preferência:

mvn archetype:generate -DgroupId=br.com.serjava.projetomaven -DartifactId=projeto-
maven -DarchetypeArtifactId=maven-archetype-quickstart 

Nesta linha informamos a estrutura de pacotes base do projeto, pelo atributo: -DgroupId=br.com.serjava.projetomaven, como pode-se observar, será criada a estrutura 
de pacotes br.com.serjava.projetomaven; -DartifactId define o nome do projeto a ser criado; 
-DarchetypeArtifactId contém o parâmetro com a estrutura do projeto a ser criado, neste caso, 
é um projeto quickstart, ou seja, um projeto simples sem inclusões de frameworks ou qualquer recurso 
adicional.

Você perceberá que depois de digitado o comando, vários downloads serão feitos do repositório central do 
maven. O maven, automaticamente, cria um repositório local em sua máquina, e a cada construção e 
criação de um novo projeto, ele verifica se as dependências necessárias para este projeto estão contidas 
em seu repositório local, caso não se encontrem, automaticamente será feito o download das mesmas. 
Ressalta-se que para uma segunda utilização, não mais será necessário o download.

Em um ambiente de desenvolvimento multi-usuários, a criação de repositórios locais é muito útil, pois 
evita-se a busca por dependências por cada membro da equipe.

Depois de realizados os downloads, você será questionado sobre a versão de seu projeto, conforme
imagem abaixo:
Informaremos a versão: 1.0
Em seguida, será mostrado os dados informados para a criação do projeto, confirme digitando Y;

O sucesso da criação deverá ser confirmado pela mensagem: BUILD SUCESS.

Dentro da diretório que utilizamos para a criação do projeto, deverá constar o projeto. 
Observe que dentro do projeto há um diretório src e um arquivo pom.xml.

O arquivo pom.xml pode ser entendido como um descritor de um projeto maven. nele podemos adicionar 
dependências ao projeto, plugins e configurações específicas, a estrutura deste arquivo no projeto criado 
deverá ser a seguinte:


  4.0.0

  br.com.serjava.projetomaven
  projeto-maven
  1.0
  jar

  projeto-maven
  http://maven.apache.org

  
    UTF-8
  

  
    
      junit
      junit
      3.8.1
      test
    
  


CONSTRUINDO O PROJETO

Uma vez criado o projeto, para que possamos fazer seu build basta acessar o diretório do projeto, no
nosso caso: C:\Projetos-Maven\projeto-maven; feito isto, digite o seguinte comando:
mvn package
Ao executar o comando package o Maven está executando uma fase (para maiores detalhes consul-
te o material de referência do Maven), em suma, o Maven tem um ciclo de fases (Life cycle), qualquer uma
que seja solicitada, todas as anteriores serão executadas até aquela que foi indicada. Estas são as fases per-
corridas:
1.  validate
2.  generate-sources
3.  process-sources
4.  generate-resources
5.  process-resources
6.  compile
Para a execução do comando package, todas as fases foram executadas, garantindo assim que ne-
nhum erro possa comprometer o projeto. Tendo-se todas as fases “aprovadas”, o projeto foi construído e
poderá ser executado.

Finalmente, para rodar o projeto, digite:
java –cp target\projeto-maven-1.0.jar br.com.serjava.projetomaven.App 

O resultado deverá ser:
Espero que tenham gostado, em breve mais posts sobre a utilização do Maven. Este foi uma pequena amosta do que este poderoso gerenciador é capaz de fazer, logo demonstrarei o uso de plugins para deploy da aplicação quando se usar um projeto web, além de prover independência de ides!

sábado, outubro 15, 2011

Instalação do Maven

O Maven surgiu como uma ferramenta para acumular conhecimento utilizado no projeto Jakarta da Apache para auxiliar no build da aplicação.
                O Maven tem como objetivo:
  • Facilitar o build de aplicações; 
  • Prover um sistema de build uniforme; 
  • Fornecer informações sobre o projeto; 
  • Criação de diretrizes para o emprego de melhores práticas; 
  • Migração transparente para novas funcionalidades.
DOWNLOAD
O primeiro passo é fazer o download do Maven, este é um projeto livre da Fundação Apache. O download pode ser feito acessando a seguinte url: http://maven.apache.org/download.html

Feito o download, descompacte o conteúdo num diretório de sua preferência; este tutorial assumirá que o diretório do Maven será c:\mvn.

Para o funcionamento do Maven, é necessário que o ambiente Java (jdk) esteja configurado, bem como a variável de ambiente JAVA_HOME. 

Variável de ambiente: M2_HOME
Considerando-se que o Maven já tenha sido descompactado, conforme indicado no item 1.1, deveremos configurar sua variável de ambiente. Assumimos que o diretório do Maven é: C:\mvn\apache-maven-3.0.

Veja a sequência de imagens para a declaração da variável de ambiente:


Na categoria Variáveis de Sistema (System variables), clique no botão New (Novo) e, preencha conforme imagem abaixo:
Neste momento a variável de ambiente M2_HOME está sendo criada, e apontando para o diretório que o Maven foi descompactado.

Localize a variável PATH, clique sobre ela e, em seguida em Editar; depois do último caractere insira um ponto e virgula (;), e em seguida, adicione: %M2_HOME%\bin. Confirme.

Pronto! O Maven já deverá ter sido configurado, para testar, abra o prompt do Windows e digite: mvn –version, o resultado deverá ser similar a:


O maven já esta pronto para ser usado em seus projetos de agora em diante. Novos posts tratarão de sua utilização, verifique!