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.
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 !!!!
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.
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:
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.
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:
Postar um comentário