Pesquisa personalizada

2008/07/31

Facelets com o Netbeans 6.1

Para quem deseja usar o Facelets com o Netbeans 6.1, finalmente (faz até algum tempinho) saiu o plugin do Facelets para Netbeans. Tem um artigo bem básico para quem deseja saber como isso pode ser feito, veja: Introduction to Facelets. Bem, para quem tentou instalar a última versão do Facelets, seja a FCS 6.1 ou 6.1 ML (eu uso a primeira, pois prefiro usar minhas ferramentas de desenvolvimento em inglês), terá uma linda resposta, como esta (a data 200804211638 pode até estar ligeiramente diferente):
Missing required modules for Plugin Facelets Support:
JSP Parser [module org.netbeans.modules.web.jspparser/3 = 200804211638]

Para solucionar a questão, após descompactar o arquivo nbfaceletssupport-6.1.zip ou nbfaceletssupport-6.1ml.zip, você deve também descompactar o módulo org-netbeans-modules-web-frameworks-facelets.nbm (que foi extraído do anterior) e editar o arquivo que está em Info/info.xml de modo a trocar o ponto onde se faz menção a data por uma versão (eu use 1.0.0 :).

Meu arquivo original estava assim:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//NetBeans//DTD Autoupdate Module Info 2.5//EN" "http://www.netbeans.org/dtds/autoupdate-info-2_5.dtd">
<module codenamebase="org.netbeans.modules.web.frameworks.facelets" distribution="" downloadsize="0" homepage="https://facelets.dev.java.net" license="AD9FBBC9" moduleauthor="Petr Pisl &amp; Po-Ting Wu" needsrestart="false" releasedate="2008/06/04">
    <manifest AutoUpdate-Show-In-Client="true" OpenIDE-Module="org.netbeans.modules.web.frameworks.facelets" OpenIDE-Module-Display-Category="Web" OpenIDE-Module-Implementation-Version="080604" OpenIDE-Module-Java-Dependencies="Java &gt; 1.5" OpenIDE-Module-Long-Description="This module serves as a basic support for Facelets." OpenIDE-Module-Module-Dependencies="org.jdesktop.layout/1 &gt; 1.3.23, org.netbeans.api.java/1 &gt; 1.10.22, org.netbeans.api.web.webmodule &gt; 1.7.21, org.netbeans.api.xml/1 &gt; 1.13.21, org.netbeans.libs.facelets &gt; 1.0.1, org.netbeans.modules.editor/3 &gt; 1.26.21, org.netbeans.modules.editor.completion/1 &gt; 1.6.22, org.netbeans.modules.editor.lib/1 &gt; 1.9.21, org.netbeans.modules.html.editor/1 &gt; 1.5.20, org.netbeans.modules.html.editor.lib/1 &gt; 1.5.21, org.netbeans.modules.j2ee.dd/1 &gt; 1.8.20, org.netbeans.modules.java.project/1 &gt; 1.8.21, org.netbeans.modules.project.ant/1 &gt; 1.12.22, org.netbeans.modules.project.libraries/1 &gt; 1.13.21, org.netbeans.modules.projectapi/1 &gt; 1.9.21, org.netbeans.modules.projectuiapi/1 &gt; 1.13.21, org.netbeans.modules.servletjspapi/1 &gt; 1.0.20, org.netbeans.modules.web.core.syntax/2 = 1, org.netbeans.modules.web.jsf/1 &gt; 1.3.28, org.netbeans.modules.web.jspparser/3 = 200804211638, org.netbeans.modules.web.project &gt; 1.6, org.netbeans.modules.xml.core/2 &gt; 1.12.21.4, org.netbeans.modules.xml.xam/1 &gt; 1.2, org.netbeans.modules.xml.xdm/1 &gt; 1.2, org.netbeans.spi.palette/1 &gt; 1.6.1, org.openide.awt &gt; 6.7.22, org.openide.dialogs &gt; 6.5.21, org.openide.explorer &gt; 6.5.21, org.openide.filesystems &gt; 6.4.21, org.openide.loaders &gt; 5.9.21, org.openide.modules &gt; 6.5.22, org.openide.nodes &gt; 6.7.21, org.openide.options &gt; 6.7, org.openide.text &gt; 6.9.21, org.openide.util &gt; 6.8.21, org.openide.windows &gt; 6.5.21" OpenIDE-Module-Name="Facelets Support" OpenIDE-Module-Requires="org.openide.modules.ModuleFormat1" OpenIDE-Module-Short-Description="Support for development of web applications based on Facelets." OpenIDE-Module-Specification-Version="1.0.6"/>
    <license name="AD9FBBC9">[NO LICENSE SPECIFIED]
</license>
</module>

Ao invés de se fazer menção a um release de uma data específica, devemos fazer com que o módulo seja, digamos, um pouco menos exigente (ou menos estúpido!) e para isso devemos fazer com que ele utilize como referência uma versão mínima, por exemplo. Ao fim, o meu ficou assim:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//NetBeans//DTD Autoupdate Module Info 2.5//EN" "http://www.netbeans.org/dtds/autoupdate-info-2_5.dtd">
<module codenamebase="org.netbeans.modules.web.frameworks.facelets" distribution="" downloadsize="0" homepage="https://facelets.dev.java.net" license="AD9FBBC9" moduleauthor="Petr Pisl &amp; Po-Ting Wu" needsrestart="false" releasedate="2008/06/04">
        <manifest AutoUpdate-Show-In-Client="true" OpenIDE-Module="org.netbeans.modules.web.frameworks.facelets" OpenIDE-Module-Display-Category="Web" OpenIDE-Module-Implementation-Version="080604" OpenIDE-Module-Java-Dependencies="Java &gt; 1.5" OpenIDE-Module-Long-Description="This module serves as a basic support for Facelets." OpenIDE-Module-Module-Dependencies="org.jdesktop.layout/1 &gt; 1.3.23, org.netbeans.api.java/1 &gt; 1.10.22, org.netbeans.api.web.webmodule &gt; 1.7.21, org.netbeans.api.xml/1 &gt; 1.13.21, org.netbeans.libs.facelets &gt; 1.0.1, org.netbeans.modules.editor/3 &gt; 1.26.21, org.netbeans.modules.editor.completion/1 &gt; 1.6.22, org.netbeans.modules.editor.lib/1 &gt; 1.9.21, org.netbeans.modules.html.editor/1 &gt; 1.5.20, org.netbeans.modules.html.editor.lib/1 &gt; 1.5.21, org.netbeans.modules.j2ee.dd/1 &gt; 1.8.20, org.netbeans.modules.java.project/1 &gt; 1.8.21, org.netbeans.modules.project.ant/1 &gt; 1.12.22, org.netbeans.modules.project.libraries/1 &gt; 1.13.21, org.netbeans.modules.projectapi/1 &gt; 1.9.21, org.netbeans.modules.projectuiapi/1 &gt; 1.13.21, org.netbeans.modules.servletjspapi/1 &gt; 1.0.20, org.netbeans.modules.web.core.syntax/2 = 1, org.netbeans.modules.web.jsf/1 &gt; 1.3.28, org.netbeans.modules.web.jspparser/3 = &gt; 1.0.0, org.netbeans.modules.web.project &gt; 1.6, org.netbeans.modules.xml.core/2 &gt; 1.12.21.4, org.netbeans.modules.xml.xam/1 &gt; 1.2, org.netbeans.modules.xml.xdm/1 &gt; 1.2, org.netbeans.spi.palette/1 &gt; 1.6.1, org.openide.awt &gt; 6.7.22, org.openide.dialogs &gt; 6.5.21, org.openide.explorer &gt; 6.5.21, org.openide.filesystems &gt; 6.4.21, org.openide.loaders &gt; 5.9.21, org.openide.modules &gt; 6.5.22, org.openide.nodes &gt; 6.7.21, org.openide.options &gt; 6.7, org.openide.text &gt; 6.9.21, org.openide.util &gt; 6.8.21, org.openide.windows &gt; 6.5.21" OpenIDE-Module-Name="Facelets Support" OpenIDE-Module-Requires="org.openide.modules.ModuleFormat1" OpenIDE-Module-Short-Description="Support for development of web applications based on Facelets." OpenIDE-Module-Specification-Version="1.0.6"/>
    <license name="AD9FBBC9">[NO LICENSE SPECIFIED]
</license>
</module>

Além disso, você terá que editar o arquivo META-INF/manifest.mf que se encontra dentro de netbeans/modules/org-netbeans-modules-web-frameworks-facelets.jar (novamente extraia o contéudo do arquivo, pois está dentro dele) e fazer a mesma coisa que fizemos com o arquivo info.xml. Após isso, monte novamente o arquivo org-netbeans-modules-web-frameworks-facelets.jar e coloque-o em netbeans/modules/ e finalmente monte o arquivo org-netbeans-modules-web-frameworks-facelets.nbm. E pronto! Isso será suficiente para o usarmos com o Netbeans 6.1!

Módulo Já Corrigido

Por comodidade, talvez você queira usar o pacote já pronto com as alterações que relato acima; baixe-o aqui: nbfaceletssupport-6.1.zip. Com as alterações que fizemos, ele irá (em princípio) funcionar em qualquer versão do Netbeans 6.xxx.

Thanks To

The JJ Blogger - Java, Oracle, PostgreSQL, and More... - If you need help installing Facelets with netbeans 6.1 or later and don't understand portuguese, see this post.
Po-Ting Wu's Weblog

Labels: ,

7 Comments:

Anonymous Anonymous said...

Grande trabalho márcio, vou testar com o plugin do seam generator , pq o jboss tools no eclipse é impossivel de usar.
Vc enviou essas alterações para o pessoal que mantem o projeto?

01 August, 2008 21:52  
Blogger marciowb said...

O erro que relatei no post acima acontece com o Netbeans 6.1 com Patch 2 (e o ainda para ser lançado, Patch 3). Portanto se você instalar o Netbeans 6.1 do zero e não atualizá-lo, não terá este problema com o plugin do Facelets para Netbeans 6.1.

A correção que sugiro acima, não dará suporte a code completion/insight. Pois quando se tenta invocar o recurso (CTRL + SPACE, por exemplo) um erro com o parser (a falta ) impede o uso desses recursos. O erro é o seguinte:
java.lang.ClassNotFoundException: org.netbeans.modules.web.jsps.parserapi.JspParserAPI$ParseResult
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at org.netbeans.ProxyClassLoader.loadClass(ProxyClassLoader.java:244)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
Caused: java.lang.NoClassDefFoundError: org/netbeans/modules/web/jsps/parserapi/JspParserAPI$ParseResult
at org.netbeans.modules.web.frameworks.facelets.editor.FaceletsContextInfoImpl.getCachedParseResult(FaceletsContextInfoImpl.java:102)
at org.netbeans.modules.web.frameworks.facelets.editor.FaceletsContextInfoImpl.getCachedParseResult(FaceletsContextInfoImpl.java:83)
at org.netbeans.modules.web.core.syntax.JspUtils.getCachedParseResult(JspUtils.java:121)
at org.netbeans.modules.web.core.syntax.JspUtils.getCachedParseResult(JspUtils.java:129)
at org.netbeans.modules.web.core.syntax.JspSyntaxSupport.getParseResult(JspSyntaxSupport.java:209)
at org.netbeans.modules.web.core.syntax.JspSyntaxSupport.getBeanData(JspSyntaxSupport.java:736)
at org.netbeans.modules.web.core.syntax.completion.JspCompletionQuery.queryEL(JspCompletionQuery.java:357)
at org.netbeans.modules.web.core.syntax.completion.JspCompletionQuery.query(JspCompletionQuery.java:128)
at org.netbeans.modules.web.core.syntax.completion.JspCompletionProvider.queryImpl(JspCompletionProvider.java:192)
at org.netbeans.modules.web.core.syntax.completion.JspCompletionProvider$Query.doQuery(JspCompletionProvider.java:110)
at org.netbeans.modules.web.core.syntax.completion.JspCompletionProvider$AbstractQuery.query(JspCompletionProvider.java:211)
at org.netbeans.spi.editor.completion.support.AsyncCompletionTask.run(AsyncCompletionTask.java:218)
at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:561)
[catch] at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:986)

BOAS E MÁS NOTÍCIAS:
Após contatar o pessoal do Netbeans, fui informado pelo Jeff Rubinoff que no Netbeans 6.5 teremos suporte nativo a Facelets. Já para o Netbeans 6.1, não há previsão (e pelo que ele falou, nem esperança) de lançamento de uma correção que permita o uso do plugin do Facelets no Netbeans.

02 August, 2008 17:49  
Blogger marciowb said...

Fiz um teste com o Netbeans 6.5M1, Product Version NetBeans IDE Dev (Build 200807040101) e o plugin Facelets modificado que publiquei nesta página (não testei com o original do Facelets) e constatei que está funcionando tudo 100%! Incluindo code insight/completion, syntax highlight, tudinho!

03 August, 2008 12:20  
Blogger Leandro Kersting said...

Oi, estou utilizando netbeans_6.5_beta e está funcionando td perfeitamente.
thanks;

01 September, 2008 13:33  
Blogger Robson de Araujo said...

ótimo trabalho. Meus parabéns... eu já tava desistindo de usar esse bicho. abraçaos.

27 September, 2008 11:47  
Blogger Robson Silva said...

Muito bom! Ótimo Trabalho.

08 October, 2008 10:01  
Blogger Unknown said...

Olá Marcio,
Fiz o teste com o Netbeans 6.5 e funcionou legal o autocomplete, mas apenas em arquivos com estrutura html. Se eu utilizar o ui:composition não tem acordo. Mesmo no projeto de exemplo (FaceletsTemplateExamples) este problema ocorre em arquivos com o ui:composition. Tem idéia de como corrigir isto?
Parabéns pelo post. Abraços.

20 January, 2009 12:06  

Post a Comment

<< Home