Back-End

26 jun, 2014

Projeto JEE com Jetty + Maven

Publicidade

Olá, pessoal!

O artigo de hoje saiu após muito sofrimento para tentar criar um Maven Project rodando com Jetty, mas que eu não precisasse ter o Jetty na máquina local e que desse suporte JSF. Parece algo simples e fácil, concorda? Mas me deu uma dor de cabeça e consumiu praticamente dois dias de tentativas. Vamos entender o motivo.

Bem, eu precisava criar um projeto para ter tudo gerenciado pelo Maven. Primeiro eu decidi sair do TomCat e ir para o Jetty, pois a performance do TomCat e outros problemas que eu estava tendo com o servidor eram críticos, mas eu não queria ter o Jetty na máquina local para poder rodar minha app, queria fazer isso de maneira simples pelo Maven. As alternativas eram:

  • Criar um projeto webapps usando o archetype do Maven;
  • Criar um dynamic web Project e adicionar o Maven;
  • Criar um projeto Maven usando archetype JSF disponíveis;
  • Criar um projeto JSF e depois adicionar Maven + Jetty;
  • Plugin jetty Eclipse via Eclipse Market.

Nenhuma dessas alternativas funcionou como eu queria. Muitos dos archetype disponíveis lá no Maven estão “bugados” e simplesmente não iniciam aplicação. A opção 2 só funcionava sem JSF. Mas ao adicionar o “JSF capacibilities” pelo eclipse, simplesmente exigia ter o Jetty local para apontar. O mesmo para a opção 4. Na opção 3 simplesmente nenhum dos archtype que tentei subia app. Até tentei arrumar, mas iria gastar muita mão de obra e tempo. A opção 5 ainda está a desejar, os plugins que testei disponíveis no eclipse market simplesmente estavam cheio de bugs, fora quando não travava a IDE.

E a solução?

Mais simples do que imaginei. Apenas criei um Simple Maven Project.

mavenproject

simplemavenproject

Clique em next:

mavensimpleconfigure

Depois clique em finish e você terá um projeto com a estrutura a seguir:

simplemavenprojectcamilo

Vamos criar nosso web.xml, WEB-INF e lib.

addingfoldermavenproject

Para os arquivos web.xml e face-config.xml é simples: apenas crie um JSF Project e copie o web.xml e face-config.xml gerado. Não recomendo querer criar os arquivos na mão, pois você pode ter erros por digitar algo errado e acabar perdendo tempo para fixar algo que não agrega muito valor.

Adicione as libs que você precisa:

libmavenproject

Novamente copiei do projeto jsf. E adicionei as do JSF 2.0 : jsf-api-2.0.9.jar e jsf-impl.jar.

Agora vamos configurar o arquivo pom do Maven:

pommavenprojectjetty

Feito isso, crie um arquivo index.jsp em webapp e dentro de body coloque o que achar necessário para testar.

mavenfileindex

Observe que criei um arquivo xhtml para poder testar o JSF 2.0. Nele só uso uma tag <h:outputLabel value=”Lopes Neto” />, assim verifico se realmente o projeto está dando suporte ao JSF.

Rodando aplicação

Para rodar a aplicação é bem simples: clique com o botão direito no projeto e siga os passos a seguir:

runasmavenconfig

Clique em Maven build e vamos adicionar um build para iniciar o Maven:

mavenrunconfigjettyrun

Apenas selecione o projeto em base directory e em goals coloque jetty:run que é para iniciar o servidor.

E agora basta acessar e ver sua aplicação rodando sem o Jetty local, apenas através do Maven:

testemavencamiloworking

Enfim, foi a forma que consegui fazer o Maven rodar para projetos JEE com JSF sem ter o Jetty local na máquina. Não posso dizer que fiquei satisfeito com essa solução, mas foi a que me deu menos dor de cabeça e atingi o objetivo final.

Vou ficando por aqui.

Abraços!