Como criar um projeto Maven com VRaptor no Eclipse

Minha primeira postagem sobre programação, finalmente! Sempre tive a ideia de fazer algo do gênero, tanto para ajudar pessoas com dificuldade na área, como para me ajudar também, quem nunca fez um manual ou apostila de consultas rápidas?
Como pré-requisito para essa tarefa, precisaremos ter um JDK instalado, Eclipse Java EE e o Maven configurados, e um servlet container, nesse tutorial usarei o Apache Tomcat 7.0.39. Tudo será feito no Windows 7. Quem abriu o hiperlink do Maven verá, na seção de documentação, que é necessário configurar as variáveis de ambiente, tanto para o Java (JAVA_HOME) como para o Maven (M2_HOME).
Após o Java e o Maven testados no CLI do Windows (CMD) com os comandos abaixo:
  • java -version
  • mvn -version
Iremos instalar o plugin do Maven no Eclipse:
  • Depois de abrir o Eclipse, navegue até a opção Help/Eclipse Marketplace.
  • Vá na aba Popular e instale o plugin Maven Integration for Eclipse (pode demorar um pouco).
  • Depois de finalizar o processo de instalação, precisaremos de outro plugin. Faça o mesmo caminho e agora procure por Maven Integration for Eclipse WTP (Incubation) e instale esse plugin, ele que permitirá o uso do Maven para projetos web.
Feita essas duas partes, trocaremos o Maven Embedded do plugin pelo o que você instalou:
  • Na tela principal do Eclipse, navegue até a opção Window/Preferences.
  • Na janela de preferências, no tree view navegue até Maven/Installations.
  • Perceba que o Maven Embedded está selecionado. Clique em no botão Add e navegue até a pasta do Maven, no meu caso é a pasta apache-maven-3.0.5.
  • Aplique essa configuração e aperto o botão OK.
Agora já podemos criar um projeto com o Maven! Entretanto, para realizar a tarefa, vamos precisar do vraptor-blank-project. Vamos fazer para a versão 3.5.0. Precisaremos de dois arquivos contidos nele: log4j.xml e web.xml. O primeiro mantém as configurações de log do VRaptor e o segundo as configurações básicas para o VRaptor funcionar, lembrando que não é necessário criar um filtro caso você esteja utilizando um container de servlet 3.0 por causa do recurso de web-fragments, contudo vou utilizar para substituir o web.xml do Maven, retirando apenas o filtro do VRaptor, uma vez que, caso você use o padrão do Maven, o recurso Expression Language não funcionará. Crie um novo projeto do Maven:
  • Na tela principal do Eclipse, navegue até File/New/Other.
  • Procure pelo wizard Maven/Maven Project.
  • Na tela New Maven Project, deixe da maneira que está. Clique no botão Next.
  • No campo Filter, digite webapp. Selecionar o registro que apresenta o Artifact Id maven-archetype-webapp.
  • Na tela de configuração do projeto, preencha as informações conforme requeridas (vou deixar um link no final com informações sobre cada campo).
  • Clique em Finish.
O processo de criação vai demorar um pouco pois o Maven irá baixar do repositório diversas referências para o projeto, isso depende da velocidade de conexão da sua internet. Agora vamos colocar as referências para o Maven baixar o VRaptor:
  • Na pasta do projeto, navegue em Deployed Resources/pom.xml.
  • Vai na aba Dependencies e clique no botão Add.
  • No campo Group Id, coloque: br.com.caelum.
  • No campo Artifact Id, coloque: vraptor.
  • No campo Version, coloque: 3.5.0.
  • Dica: os dados para essa referência podem ser encontrados aqui.
  • Clique no botão OK.
  • Salve o pom.xml.
Todos os pacotes necessários serão baixados para o seu projeto suportar o VRaptor. Se quiser visualizar o web-fragment.xml que elimina o uso do filtro no web.xml principal:
  • No Project Explorer do Eclipse, navegue na pasta do projeto que criamos até Java Resources/Libraries/Maven Dependencies/vraptor-3.5.0.jar/META-INF/web-fragment.xml.
Vamos colocar agora o log4j.xml e substituir o web.xml do Maven:
  • No projeto em branco que baixamos, copie o arquivo src/log4j.xml.
  • No Eclipse, cole ele na Source Folder: Java Resources/"src/main/resources".
  • Para resolver o problema de validação do log4j.xml, sugiro a seguinte solução.
  • Para substituir o conteúdo do web.xml padrão do projeto, procure pelo web.xml no projeto em branco que baixamos, copie o conteúdo do arquivo WebContent/WEB-INF/web.xml, porém retirando a parte dos filtros do VRaptor, conforme a figura:

  • Cole isso no web.xml do seu projeto (src/main/webapp/WEB-INF/web.xml) e substitua o display-name pelo nome do seu projeto.
Veja que no seu projeto, dentro de Java Resource, não tem a source folder src/main/java, para solucionar o problema, sugiro a seguinte solução.
Vamos agora criar nossa classe controller, e disponibilizar uma view para testar:
  • Crie uma nova classe IndexController no pacote br.com.teste.controller.
  • Anote a classe com @Resource do VRaptor.
  • Crie um método público que retorne uma String com qualquer nome sem parâmetro.
  • Anote esse método com @Path("/") do VRaptor.
  • No escopo do método coloque para retornar uma string, como um "Olá mundo!".
  • Crie um JSP com o nome index.jsp no diretório src/main/webapp/WEB-INF/jsp/index.
  • Coloque o seguinte conteúdo conforme a figura:
  • Clique com o botão direito do mouse sobre o projeto, navegue até Run As/Run on Server.
  • Selecione o seu servlet container e veja o resultado.
Espero que tenha dado certo para você!
É necessário ter um conhecimento básico do VRaptor para entender o porquê de criar as pastas, colocar as anotações, entre outros, o mesmo vale para o Maven. Segue alguns links rápidos de ajuda:
Apostilas sensacionais sobre desenvolvimento com Java:
Aqlbras!

Comentários

  1. Ótimo post, bem detalhado e também com imagens pra ajudar no entendimento e acompanhamento.

    ResponderExcluir
  2. Bom dia.

    Willian, estou com dificuldades na instalação do maven, quando entro no eclipse marketplace e digito maven integration for eclipse ele mostra: m2eclipse-wtp: maven integration for eclipse wtp ( from github) mas nao deixa instalar, o q fazer?

    ResponderExcluir
    Respostas
    1. Wescley,
      Preciso de mais informações para ajudá-lo... Por exemplo, qual a versão do seu eclipse? Ele é o IDE for Java EE Developers? É o Kepler, Juno? Geralmente é só fazer o download da última versão, instalar o plugin (sem configurações adicionais) e testar o download de algum pacote... Provavelmente funcionará.
      Aqlbras!

      Excluir
  3. DEU CERTO!!!!!!

    AWWWWWN YEAH! OBRIGADO! :D

    ResponderExcluir
  4. Olá Willian,
    Estou com problemas para executar seu exemplo. Estou usando o Eclipse EE Luna e apache-maven-3.2, java jdk8.e Tomcat 7.0.55.
    Obtive dois erros para linha 1 de Programa:

    - Cannot change version of project facet Dynamic Web Module to 2.5.

    - One or more constraints have not been satisfied.

    E erro 404 na execução

    Você pode me dar alguma dica?

    ResponderExcluir
  5. Ainda tentando resolver, me surgiram algumas dúvidas:

    - Devo voltar a versão do Java para jsk7?
    -E quanto ao maven e o Eclipse, seria melhor usar o Kepler em vez do Luna?

    ResponderExcluir
    Respostas
    1. Olá Carcarah, sugiro você verificar se a versão usada na postagem suporta o JDK 8. Até onde sei, ele aceita até o 7. Em relação ao Dynamic Web Module provavelmente é por causa do Maven, você vai ter que alterar o arquivo org.eclipse.wst.common.project.facet.core.xml na mão, mas pesquise antes para entender o porquê, e por fim não vejo limitação em usar uma nova versão do Eclipse, a não ser que ela tenha limitações em relação ao Maven, por exemplo. No teste eu usei o Kepler.

      Aqlbras!

      Excluir
    2. Oi Willian, obrigado por sua ajuda.
      Resumo da Ópera: Consegui fazer rodar, embora a mensagem não tenha desaparecido. Voltei a versão do jdk para 7, também tentei voltar o Eclipse para o Kepler, mas não rola, não tem mais nada no marketplace de maven para ele, só para o Luna, e este não funciona no Kepler, eu tentei. Enfim não tenho certeza se foi só a mudança do jdk, ou se tinha esquecido alguma coisa, já que refiz do zero. Valeu! obrigado.

      Excluir
    3. Carcarah, vou ver se posto o projeto no github amanhã, mas será para o VRaptor 4. Atualizarei essa postagem com o link para acesso.

      Aqlbras!

      Excluir
  6. Respostas
    1. Carcarah, fiz uma postagem sobre o uso do DataTables e lá tem um CRUD funcional para o VRaptor 3. Talvez seja muito diferente para você a versão 4 pois muda diversos conceitos. Segue o link:

      https://github.com/willianantunes/labdatatables

      Aqlbras!

      Excluir
  7. Cara, salvou minha vida... por alguns momentos. Agora estou preso em outros erros do Maven...

    ResponderExcluir
    Respostas
    1. Smaily, o Maven pode ser um pouco chato mesmo, eu mesmo sofri um pouco com o dito cujo. Tente resolver pesquisando (no Stackoverflow tem muita coisa) primeiro antes de tirar uma dúvida. Eu resolvi quase todos os meus problemas só em fóruns. Realmente tem muita coisa.

      Excluir

Postar um comentário