Criando projeto JSF com Maven no Eclipse

Olá Pessoal,

No post de hoje vamos ver como criar um projeto JSF no Eclipse já suportando o Maven. Parece algo simples,  concorda? Mas pode dar uma dor de cabeça, e veremos o motivo.

Lets GO…

Starting…

Antes de mais nada instale o Jboss tools, conforme este post. Após a instalação, vamos ver o cenário que temos.

  • Maven 3.x
  • Eclipse Helios

Cenário 1

Você pode adicionar o maven ao seu projeto manualmente, ou seja, basta adicionar o pom.xml ao projeto e fazer as devidas configurações. Ideal é quando você já tem um projeto e no inicio não usava o maven, mas resolveu adotar agora, daí você não vai querer deletar o projeto e criar um novo “maven Project” certo. Mas sabemos que fazer configuração manualmente sempre é chato. Porém essa é uma forma de você adicionar o Maven ao seu projeto.

Cenário 2

Você está querendo começar um projeto do zero, tipo JSF Project. Mas, ao criar, vê que ele não está na estrutura do maven. E o que fazer? Podemos ir pelo cenário 1. Mas e se eu quiser já criar automático?  Há uma opção usando o File  New  Maven Project.



Quando escolhemos Maven Project há varias opções de criar um projeto, desde um simple maven Project, até um Project webapp.  Na imagem a seguir você pode ver as opções de maven Project disponíveis, porém muitos deles estão com bugs críticos que não cria o projeto ou dá umas exceções e trava tudo. Um exemplo é a appfuse para jsf + hibernate + Spring. Se tivesse funcionando seria muito show, mas infelizmente não está.  E o que fazer ir para o cenário 1?

É o que fiquei pensando. Apesar de podermos criar a nossa própria estrutura archetypes http://maven.apache.org/guides/mini/guide-creating-archetypes.html e ser fácil e rápido, mesmo assim ainda fiquei incomodado pelo fato de não conseguir gerar um projeto JSF, já com o Maven consegui com apenas alguns cliques.

Solução?

Sim, depois de muitas horas tentando entender o motivo e quebrando a cara com alguns plugins, achei um workaround. Vamos lá:

Crie um Maven Project (File è new è Project è maven project)

Na próxima tela deixe assim:

Clica em next e na tela seguinte vamos escolher maven-achetype-webapp

Clica em next

E agora vamos preencher. Estou presumindo que você já conhece o maven, então não irei explicar o que significa cada campo. Veja como ficou a minha:

Clique em finish.

Como você percebeu, o workaround foi criar um projeto do tipo webapp, mas ainda o projeto não tem suporte JSF, podemos fazer isso manualmente ou automaticamente. Clique com o botão direito no projeto e escolha configure >> add jsf capabilities:

Escolha o Servlet version 2.5

Clique em finish, no warning que aparecer clique em Yes

O projeto vai ficar “quebrado”, pois a versão do web.xml está diferente. Abra o web.xml e altere o version para 2.5

Agora precisamos adicionar as libs para JSF no pom.xml. Abra o pom.xml e clique na aba dependencies

E adicione:

com.sun.faces jsf-api

com.sun.faces jsf-impl

Não esqueça de adicionar também:

javax.servlet javax.servlet-api

javax.servlet jstl

Feito isso seu projeto deve tá assim:

Workaround para Windows 7

Quem tem Windows 7 pode se deparar com o problema de não conseguir executar “cmd” e para resolver o problema basta adicionar ao path do sistema o seguinte valor:

%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem

O Maven não está atualizando no eclipse

Passei por esse problema de alterar o pom.xml e o maven não fazer o download das libs e a modificação não refletir no eclipse, daí basta forçar o download:

mvn eclipse:eclipse -DdownloadSources=true

Vou ficando por aqui, espero que tenham gostado do post.

See ya!

Rodando Jetty a partir do Maven

Olá Pessoal,

No post de hoje vamos ver como rodar o Jetty a partir do maven. Confesso que é a forma mais fácil e rápida. Já tentei de plugins no Eclipse etc, mas tem alguns plugins que dão muito trabalho, fora os bugs existentes.

Jetty no Maven

Para rodar o Jetty no maven é mais simples que tirar doce de criança. Caso não tenha nenhum projeto web com maven criado, siga os passos a seguir, caso contrário pule essa parte e veja só configuração do seu pom.xml e execute o maven.

Criando Projeto Maven Eclipse

File >> New >> Project

Maven  >> Maven Project

Clique em next e next

E na tela de Archetype escolha o projeto web, conforme a imagem a seguir:

A seguir o meu projeto:

Abra o arquivo pom.xml e vá na aba pom.xml.Dentro da tag build vamos adicionar o plugin para o Jetty e o maven vai se encarregar de fazer o restante:

<plugins>

<!– setup JETTY –>

<plugin>

<groupId>org.mortbay.jetty</groupId>

<artifactId>mavenjettyplugin</artifactId>

<version>6.1.26</version>

<configuration>

<!– uncomment this block if you want to change the default port jetty –>

<!– <connectors> <connector implementation=”org.mortbay.jetty.nio.SelectChannelConnector”>

<port>9090</port> </connector>

</connectors> –>

<!– force friendly name instead of artifact name + version –>              <contextPath>${project.build.finalName}</contextPath>

<!– You can save changes in a file or class and refresh your browser

to view the changes. –>

<scanIntervalSeconds>3</scanIntervalSeconds>

</configuration>

</plugin>

</plugins>

</build>

Feito isso, salve o arquivo e vamos rodar o jetty e ver  o resultado. Você pode rodar pelo Eclipse ou por fora via command line (eu gosto de rodar por fora).

Rodando pelo Eclipse

Clique com o botão direito no projeto >> Run As >> RunConfigurations

Escolha maven build e deixe conforme a tela a seguir:

Aqui não tem nada demais, apenas roda o comando mvn jetty:run e em base directory informamos o projeto que queremos.

Feito isso, o console do Eclipse deve estar assim:

Então podemos ver que o Jetty subiu normalmente.

Rodando via command line Windows

É bem simples. Abra o prompt do  Windows e vá até o diretório onde está o seu projeto. Ao chegar lá, execute o seguinte comando : mvn jetty:run  e veja que o Jetty será started. Na primeira vez que você fizer isso, o maven vai baixar os .jars  que são requeridos e deve demorar um pouco.

Testando aplicação

Para testar a aplicação é bem simples, com o Jetty rodando apenas digite no browser http://localhost:8080/   vai dar erro 404, não se preocupe, clique no link que está nessa página e certamente você vai ver a página index da sua aplicação, conforme a imagem a seguir:

Vou ficando por aqui!! Espero que tenham gostado do post.

See ya!! Abraços

Projeto JEE com jetty + maven

Olá Pessoal,

O post de hoje saiu após muito sofrimento de 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 2 dias de tentativas. Vamos entender o motivo.

Lets go …

Contexto

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 estava tendo com o servidor estavam sendo criticos, 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, daí veio as alternativas:

  • 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, ao adicionar “JSF capacibilities” pelo eclipse simplesmente exigia ter o jetty local para apontar. O mesmo para a opção 4. A opção 3 simplesmente nenhum dos archtype que tentei subia app. Tentei até arrumar, mas era muita mão e tempo que seria gasto. 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.

 

 

Clique em next

 

Clique em finish. E terá um projeto com a estrutura a seguir:

 

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

 

 

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 fixar algo que não agrega muito valor.

Adicione as libs que você precisa:

 

 

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:

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

 

 

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

Rodando aplicação

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

 

Clique em maven build e vamos adicionar um build para iniciar o maven

<img 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:

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.

Vou ficando por aqui. See ya!!

Abraços!

ThroubleShooting:Adicionando AutoComplete XHTML PrimeFaces projeto Maven

Olá Pessoal,

No post de hoe veremos um troubleshooting  quando criamos um projeto Maven e precisamos do auto-complete  nos XHTML.

Lets go…

Starting…

Ao criar um projeto maven para uma aplicação web, por default ele não fornece o autocomplete para arquivo xhtml, e evidente que para componentes externos como PrimeFaces também não terá por default .

E como resolver?

A solução não é das melhores, mas é o que tem que ser feito, vamos ver os passos:

1. Se vc usar tomcat/jetty baixe a versão  no caso do exemplo estou usando Jetty 8.x

2. Garante que você tem o .jar do primefaces adicionar ao pom do projeto

3. clique com o botão direito no projeto >> configure >> add...

 

Na tela que abrir clique em next, observe o arquivo web.xml vai sofrer alteração, pois vamos adicionar suporte ao JSF.

Depois clique em Finish.

Se você não tem um servidor de aplicação configurado no seu eclipse, vá em Windows >> preferences >> Server >> Runtime Environment e adicione.

** Você deve apontar para a pasta onde tá o servidor instalado, no caso do jetty ele não é instalado, após descompactar o arquivo .zip, apenas aponta para a raiz da pasta descompactada. Assim o Eclipse encontrará o .jar que ele precisa.

Vou ficando por aqui, espero que tenham curtindo o post.

Abraços,  see ya!!

Throubleshooting Maven não fazendo checkout eclipse

Olá Pessoal,

E lá vamos nós com mais um troubleshoot. Hoje veremos um do maven com eclipse.

O problema

Se você ainda não passou, talvez vai passar por esse problema algum dia ao rodar o comando mvn eclipse:eclipse e ver que o checkout das dependências que você acabou de atualizar não está sendo feito. Iai o que fazer?

A solução

Basta forçarmos isso com o comando:

mvn eclipse:eclipse -DdownloadSources=true

E pronto. Será baixado e seu problema resolvido.

Bobo, né? Mas dá um trabalho até descobrir que só.

Abracos, see ya!