Empaquetar archivos de Facelets (plantillas, incluye, compuestos) en un JAR

¿Es posible poner archivos JSF2 Facelets con contenido común en un JAR para usarlo desde otras aplicaciones web dentro de, por ejemplo, , , , etc.? Si es así, ¿cómo puedo lograr esto? ¿Es necesaria alguna configuración adicional?

Puede poner recursos comunes en la carpeta /META-INF/resources del JAR que se tratará como carpeta /WEB-INF/resources del WAR.

P.ej

 CommonWebProject |-- META-INF | |-- resources | | `-- common | | |-- css | | | `-- some.css | | |-- js | | | `-- some.js | | |-- images | | | `-- some.png | | |-- components | | | `-- somecomposite.xhtml | | |-- someinclude.xhtml | | `-- sometemplate.xhtml | |-- faces-config.xml | `-- MANIFEST.MF : 

Los recursos del JAR están disponibles de la siguiente manera:

 <... xmlns:common="http://xmlns.jcp.org/jsf/composite/common/components">       ... 

Si también desea activar el escáner de anotaciones JSF2 para poder poner @FacesValidator , @FacesConverter , @FacesConverter y consortes también en ese proyecto, cree un archivo /META-INF/faces-config.xml compatible con /META-INF/faces-config.xml :

    

La resolución de recursos de Facelets solo es necesaria si los recursos no están en /META-INF/resources por algún motivo, o cuando no está utilizando Servlet 3.0 pero 2.5, o cuando está utilizando una versión anterior de JBoss / JSF que tiene errores en la resolución de recursos META-INF. Consulte también ¿Cómo crear una aplicación modular JSF 2.0? para un ejemplo concreto.

Sí, puede extender com.sun.faces.facelets.impl.DefaultResourceResolver para proporcionar recursos a JSF.

Una solución genérica es la siguiente:

En tu pom.xml agrega:

   com.intersult jsf-desktop 1.1-SNAPSHOT   intersult-repo Intersult Repository https://intersult.com/svn/public/maven  

O simplemente agregue https://intersult.com/svn/public/maven/com/intersult/jsf-desktop/1.1-SNAPSHOT/jsf-desktop-1.1-SNAPSHOT.jar en su carpeta / WEB-INF / lib.

En su web.xml, agregue:

  javax.faces.FACELETS_RESOURCE_RESOLVER com.intersult.jsf_desktop.util.ClassPathResourceResolver  

En cualquier JAR dentro de WAR, coloque XHTML-Files en / META-INF / resources /

Acceda a través de “http: // / / / resource / ” (por ejemplo, http: //localhost/faces/resource/test.xhtml ) y será renderizado.

Primero lea aquí sobre la diferencia entre guerra y jar en una pregunta similar.

Tendrás que crear un archivo EAR y agrupar las guerras.