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:
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.4.0.0 com.serjava.app app 1.0-SNAPSHOT pom
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:
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.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
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
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!