Para quem não sabe, Maven é uma excelente ferramenta para o gerenciamento de projetos, principalmente por facilitar muito o controle de dependências e automatizar o processo de inclusão dessas. Mas o seu papel não se limita a essa tarefa; uma grande ajuda dada pelo Maven é a automatização de outras tarefas como descompactar um determinado arquivo ou publicar um jar. De certa forma, pode-se até comparar o Maven com o velho Ant.

Neste post iremos ver como o Maven pode ajudar tanto na inclusão de dependências como em outras tarefas antes realizadas manualmente. Como o foco não será o projeto em si, utilizaremos o projeto do Teclado Virtual do post anterior.

Ao final do post existirão links para um pacote compactado com o projeto do tutorial e um exemplo (parcial) online do mesmo.

Ah… Quando criei esse blog alguns amigos de trabalho me disseram que logo logo eu pederia o ânimo pra postar… Pois é… >.<

1. Ambiente e Criação do Projeto

Primeiramente, utilizarei o NetBeans 6.5 com o plugin do Maven (basta buscar por “Maven” no filtro de plugin). E o Tomcat 6 (inclua-o no NetBeans). O código do teclado virtual será o mesmo do post anterior, com algumas pequenas alterações. Então vamos lá!

Tendo o plugin do Maven instalado, crie um novo projeto para o novo teclado virtual (Novo Projeto -> Maven -> Maven Project). Escolha o “Maven Quickstart Archetype” mesmo. Nomeei o meu projeto de “teclado-mvn” e coloquei o “Group Id” e o “Package” como “br.com.teclado.virtual.mvn”. Finalize.

Será criado um projeto java já nos moldes do Maven. Observe na pasta “Project Files” o arquivo “pom.xml”. Ele é o centro das configurações do Maven no seu projeto. Dentro da tag “dependency” haverá algumas entradas referentes ao “junit”. Isso quer dizer que o seu novo projeto é dependente do JUnit e tentará baixar o .jar referente do repositório padrão do Maven quando você for realizar algum teste (neste caso é em testes devido ao “scope” da dependência).

Agora vamos efetivamente “recriar” o teclado virtual. Apague as classes criadas automaticamente nos pacotes do projeto e copie a classe “TecladoVirtual.java” do projeto do post anterior para o pacote principal do novo projeto. Diversos erros deverão ser visíveis e, se você leu o post anterior, deverá saber o porquê.

No projeto original do teclado virtual, tínhamos que manualmente copiar o plugin.jar da pasta do JRE instalado para podermos utilizar a classe JSObject. Agora utilizaremos o Maven para fazer isso de uma maneira mais “elegante”.

 

2. Instalação e Utilização de Nova Dependência

Abra o “pom.xml” e vamos customizar a construção (build) do projeto. Em suma, o que faremos, é instalar o “plugin.jar” no repositório local e adicionar essa dependência ao teclado.

Para deixar mais claro, o que o Maven faz é, artravés do arquivo de configurações dele (pom.xml), identificar as dependências do projeto e baixar os seus jars do repositório remoto para uma pasta local na própria máquina (é chamado de “Repositório Local”). Então temos que incluir o “plugin.jar” no repositório local para podermos utilizá-lo.

No “pom.xml” adicione o seguinte treço dentro da tag <project>.

Observando apenas a primeira tag <plugin>, temos que durante a fase (<phase>) do clico de vida de construção do projeto “generate-sources” (antes da compilação), irá executar a tarefa (<goal>) “install-file” da entidade (<artifactId>) “maven-install-plugin”. O arquivo a ser instalado (<file>) será o “plugin.jar” da JRE instalada e referenciada pela variável de ambiente “JAVA_HOME”. Após instalado, o jar poderá ser encontrado no repositório local pelo grupo “java.plugin”, artefato “plugin” e versão “1.6.0”.

Os plugins restantes na tag “build” são necessário para a execução completa do ciclo de vida da compilação feita pelo Maven.

Agora dê um “Limpar e Construir” (Clean and Build) no projeto e verifique se os erros no TecladoVirtual.java permanecem. Se sim, então está correto! =P

O que nós fizemos foi incluir o “plugin.jar” no repositório local, mas ainda não o incluimos no projeto. Antes disso, vamos conhecer o repositório local. Abra no Windows a sua pasta do “Documents and Settings” (C:\Documents and Settings\Usuario) e verá uma pasta “.m2”. Nela está o seu repositório local do Maven. Todas as dependências de projeto são baixadas para esta pasta de modo que não seja necessário baixar tudo novamente caso um novo projeto seja criado. Se você tentou construir o nosso novo projeto do teclado virtual, então já deve exisitir a pasta “.m2\repository\java\plugin\plugin\1.6.0” com o “plugin-1.6.0.jar”. Agora, adicione esta dependência ao projeto.

No “pom.xml”, dentro da tag <dependencies>:

Salve, limpe, compile e veja os erros do TecladoVirtual.java sumirem. Caso algum erro tenha ocorrido até este ponto, verifique se a variável de ambiente “JAVA_HOME” está devidamente setada e o caminho no “pom.xml” até o “plugin.jar” está correto.

Uma pequena alteração deve ser feita em relação ao projeto anterior do teclado virtual. Através do Windows, crie a pasta “resources” (“teclado-mvn\src\main\resources”) no novo projeto e copie as imagens do teclado para esta pasta. No NetBeans deverá aparecer a pasta “Other Sources”. E no “TecladoVirtual.java” altere o caminho à imagem de “/resources/teclado1.JPG” para “/teclado1.JPG”.

Veja a imagem de como ficou:
teclado-mvn-status1

(abrir em nova janela)

 

3. Codificação da Senha do Teclado

O que faremos agora é uma alteração no código do teclado virtual para que a senha copiada ao campo oculto do formulário HTML seja previamente codificada com MD5 impossibilitando a obtenção da senha original mesmo que o valor do campo oculto seja lido.

Mas antes precisamos incluir uma dependência ao projeto; é o “commons-codec”. Se você está utilizando o NetBeans e ainda não descobriu a grande vantagem da IDE sobre a edição de XMLs, tente usar agora o auto-completar (CTRL+espaço) para encontrar o <groupId> e o <artifactId> desta nova dependência. Assim que o projeto foi criado, o plugin do Maven deve ter baixado (ou tentado baixar) um índice de dependências do repositório remoto contendo os grupos e artefatos disponíveis. A única demora deverá ser para encontrar as versões (<version>) disponíveis, pois ele precisará procurar em tempo real no repositório remoto.

Então adicione dentro da tag <dependencies>:

Com isso, podemoremos usar o pacote “java.security.MessageDigest” para codificar a senha. Sem maiores explicações (para não fugir do foco e para não me estender demais), o métodos para codigicação de Strings em MD5 deverá ficar assim:

Agora basta utilizar este método codificar a senha no momento de enviar ao HTML:

 

4. Criação do Projeto Web para Utilização do Teclado Virtual

Vamos criar outro projeto Maven seguindo os mesmos passos do projeto anterior, mas escolheremos “Maven Webapp Archetype” depois de Arquivo -> Novo Projeto -> Maven -> Maven Project. Os nomes que utilizei foram “teste-teclado-mvn” no nome e “br.com.teclado.virtual.mvn” como nome de grupo e empacotamento.

Alguém notou alguma semelhança dos dados que incluímos na criação de um projeto Maven com os dados utilizados para a adição de uma dependência? Pois é, quando compilamos um projeto, uma das fases executada é a instalação desse projeto no repositório local, sob o Grupo e Artefato utilizados na criação do mesmo. Assim, outros projetos podem ser dependentes do projeto instalado. Mas não é exatamente este o caso da relação Teclado Virtual – Projeto Web.

O projeto web não é exatamente dependente do Teclado Virtual para realizar alguma tarefa ou utilizar algum método. O jar do teclado deve apenas estar presente para que o navegador do usuário possa baixar e executá-lo. Então, ao invés de simplesmente adicioná-lo como um dependência, iremos copiar o jar que se encontra no repositório local para uma pasta do projeto web, tornando-o diponível ao usuário.

Sem mais enrolação, insira o trecho a seguir dentro da tag <project> do “pom.xml” do projeto web.

Em suma, durante a fase (<phase>) de compilação o Maven irá copiar (<goal>) as dependências (<artifactItems>) referentes ao projeto do Teclado Virtual e ao pacote do “commons-codec”, renomeando-os para “teclado-mvn.jar” e “commons-codec.jar”, para a pasta (<outputDirectory>) “/src/main/webapp/applet”. Esta pasta estará no mesmo nível do “index.jsp” do projeto.

O “commons-codec” teve que ser copiado também pois onde o jar do teclado executará (no navegador do usuário) nem sempre existe esta biblioteca. Se quiser testar sem a instrução para copiar este pacote, não tem problema, a princípio.

Por último, podemos alterar o “index.jsp” para utilizar o Teclado Virtual. Vamos simplesmente copiar o código do HTML de teste do post sobre o Teclado Virtual, lembrando de alterar os valores da variáveis “clazz” e “jar” para “br.com.teclado.virtual.mvn.TecladoVirtual.class” (ou como você nomeou sua classe/pacote) e “applet/teclado-mvn.jar”, respectivamente.

Se deu tudo certo, ao executar o projeto web, deverá aparecer o teclado virtual e, ao submeter a página, no endereço da mesma deverão estar o nome do usuário e a senha codificada.

Então é isso! Finalmente consegui publicar um post depois de tanto tempo! \o/

Para encontrar outras operações disponíveis pelo Maven, tente o Oráculo ou tente explorar os artefatos do Grupo “org.apache.maven.plugins” (incluso em ambas operações descritas anteriormente).

cya.

Projeto do Teclado Virtual com Maven compactado e configurado no NetBeans: teclado-mvn

Exemplo Online do teclado com a codificação da senha: teclado-mvn-online