sexta-feira, 18 de julho de 2014

Como criar um projeto no Eclipse com webapp, src/main/java e etc.

Este post é sobre uma questão que eu já vinha pesquisando já tem um tempo e que me deu uma bela dor de cabeça. Porém, não vamos perder mais tempo. Mão na massa.

O meu problema era: precisava criar um simples HelloWorld com Spring MVC com a estrutura de projeto do maven. Quando digo "estrutura de projeto do maven", quero dizer um projeto web com a pasta webapp, src/main/java, entre outras.

Depois de muita dor de cabeça e muita pesquisa, achei a solução. Abaixo, a minha lista de ferramentas:

  • Eclipse Kepler
  • Maven 3.0.4 (Esse maven já veio no Eclipse)
Abra o eclipse com o seu workspace. Crie um projeto Maven seguindo os passos do vídeo abaixo.

Vídeo nº1

Se você seguiu os mesmos passos vídeo nº 1, irá notar que o container web criado foi na versão 2.3 e que não foram criados os packages src/main/java e src/test/java. Não se espante, isso é normal. Um bug acabou de acontecer.

UMMMM BUUGGGG !!!!

Como fazemos para corrigir esse bug ? Siga os passos do vídeo nº 2.

Vídeo nº 2

Nossa, nesse momento você deve estar se sentindo perdido porque, nesse vídeo realizamos vários passos.

Primeiro, vamos entender o que aconteceu. Quando o projeto foi criado, ele teve o seu arquivo de classpath gerado e nele foi especificado que outras pastas além, da pasta resources também teriam arquivos. Essas pastas são: test e java. No vídeo é possível notar que, quando abrimos o Build Path do projeto, existem duas pastas que estão faltando, justamente as pastas que citamos acima. Para resolver esse bug, ou removemos alguma das pastas do Build Path e apertamos o botão Ok ou, adicionamos uma pasta nova no File System(Windows Explorer) do projeto, adicionamos a mesma no Build Path, apertamos Ok, e depois removemos a mesma.

A segunda solução foi a usada no vídeo. Como disse acima, o que aconteceu foi um bug. Uma escrita no arquivo de classpath foi feita mas, as pastas não foram criadas. Logo, precisamos realizar alguma ação que dê um "refresh" no projeto e assim, o Eclipse irá criar as pastas corretas com as configurações corretas.

Pronto, já temos um projeto criado de forma funcional. No início do nosso post, comentei que o projeto gerado com base no archtype do Maven tem o container web na versão 2.3. Existe aí, um outro problema. A versão 2.3 é um pouco limitada, por exemplo: caso seja necessário usar EL, será necessário adicionar a declaração abaixo:

<%@ page isELIgnored="false" %>
Recomendo a leitura do post do blog do Mkyong que, explica isso e foi de lá que, consegui esta explicação.

http://www.mkyong.com/spring-mvc/modelandviews-model-value-is-not-displayed-in-jsp-via-el/

Agora imagine que, em todas as suas páginas você tenha que adicionar essa declaração. Cansativo, né ? A chance de cometer erros aumenta muito. Na versão 2.5 do container web, o uso de EL é automático e o arquivo web.xml é escrito de forma diferente. Neste momento, o caro leitor deve pensar: "Ahh !! Isso é mole, é só eu ir no Project Facets do projeto e mudar para 2.5 o web module" e eu respondo em seguida: "Você está completamente errado".

Caso alguém tente fazer o que foi pensado acima, não conseguirá pois, o Eclipse acusa um conflito. Então, mais uma vez teremos de dar nosso jeito. Siga os passos do vídeo nº 3 para mudar o web module do projeto de 2.3 para 2.5.

Vídeo nº 3

No vídeo 3 mudamos um arquivo de configuração do próprio Eclipse. Desta forma, forçamos a mudança de versão do web module mas, o arquivo web.xml também precisa ser modificado conforme é mostrado no blog do Mkyong. Com o arquivo web.xml regerado, é necessário mudar o Java Compiler do projeto pois, mexemos na versão do Java usado.

Feito isso tudo, é só começar a programar e ser feliz.

Espero que esta minha contribuição ajude a muitos pois, foi muito difícil chegar a essa solução. Caso alguma outra pessoa consiga outras soluções, diferentes das minhas, para o mesmo problema, deixe sua contribuição nos comentários.

Até a próxima.

Nenhum comentário: