2011-04-13 16 views
10

Tengo un proyecto Maven que está empaquetado como jar.Cómo agregar archivos TLD y Tag Lib en un proyecto jar de Maven

Y también tengo un proyecto Maven que está empaquetado como war. Este proyecto de guerra tiene un archivo tld y algunos archivos xhtml (la etiqueta libs). La estructura del proyecto de la guerra es (básicamente):

pom.xml 
src 
    main 
     java 
      ... 
     webapp 
      WEB-INF 
       my-facelets.taglib.xml 
       facelets 
        aTag.xhtml 
        anotherTag.xhtml 
      META-INF 
       my-facelets.taglib.tld 

Y entonces apareció un requisito para eliminar esos archivos XML, XHTML y TLD del proyecto de la guerra y empaquetarlos en el proyecto frasco. Así que mi primer intento fue poner en POM del proyecto jar:

<resources> 
    <resource> 
    <directory>src/main/tld</directory> 
    <targetPath>META-INF</targetPath> 
    </resource> 

    <resource> 
    <directory>src/main/taglib</directory> 
    <targetPath>WEB-INF</targetPath> 
    </resource> 
</resources> 

y poner los archivos, por supuesto, en src/main/tld (los que quería exportar a META-INF) y src/main/taglib (los que yo quería exportar en WEB-INF) Y el frasco fue creado como deseo:

myjar 
    com 
     my 
      classes 
    WEB-INF 

    META-INF 
     my-facelets.taglib.tld 
    WEB-INF 
     ... 

Y luego añadió esta nueva jarra para mi primer proyecto de la guerra, como una dependencia Maven.

El problema es que esos archivos .tld, .xhtml, .xml que están dentro del META-INF del contenedor, WEB-INF (el contenedor está dentro de war WEB-INF/lib) no se reconocen. Aparentemente deberían estar directamente en la estructura de guerra, a menos que se realice alguna otra configuración. Este es un requisito imprescindible, ya que varios proyectos de guerra utilizarán las características (clases y taglibs) del proyecto jar.

+0

¿Funciona si pones estos archivos en el frasco, pero no dentro de WEB- Carpetas INF o META-INF? – Raghuram

+0

no. lo contrario. – bluefoot

Respuesta

10

La práctica actual es colocar los archivos TLD en la biblioteca de etiquetas JAR y dejar que el cargador de clases los encuentre. Descargue los JAR de JSTL de Apache y vea cómo lo hacen. Yo recomendaría seguir esa convención. También simplificará su aplicación, ya que no tendrá que declarar el TLD en su archivo web.xml: simplemente coloque el JAR en su CLASSPATH y asegúrese de que el URI en su .jsp coincida con el del TLD.

+0

Estaba pensando también en descargar algo y ver cómo lo hacen. Lo verificaré y publicaré los resultados. – bluefoot

+1

funciona correctamente. No es necesario declarar nada en manifiestos. Solo insertando todos los archivos dentro de 'META-INF' de jar y dejando que maven construya la guerra (con el jar dentro de su' WEB-INF/lib') hizo el truco. El error fue '' de mi segundo elemento ''. – bluefoot

5

@duffymo - Su solución funciona totalmente. Agregar gráficos a su descripción.

Cree un proyecto convencional que genere JAR. mantener la estructura como esta por debajo

src -- main 
      |-- java 
      |  `-- net 
      |   `-- madhur 
      |     `-- helloTag.java 
      `-- resources 
        `-- META-INF 
         `-- tags 
          `-- customTags.tld 

Para su archivo customTags.tld añadir algo URI como esta

<uri>http://www.xyzabc.com/taglibs/customTags</uri> 

etiquetas de Acceso en que GUERRA presentar Guerra

debe tener siguiente estructura

META-INF/ 
    META-INF/MANIFEST.MF 
    WEB-INF/ 
    WEB-INF/classes/ 
    WEB-INF/lib/ 
    WEB-INF/lib/{tagLibrary}.jar 
    WEB-INF/web.xml 
    WEB-INF/customTags.tld 

Web.xml

<jsp-config> 
     <taglib> 
      <taglib-uri>www.xyzabc.com/taglibs/customTags</taglib-uri> 
      <taglib-location>/WEB-INF/customTags.tld</taglib-location> 
     </taglib> 
    </jsp-config> 

El uso de etiquetas en FTL o archivo JSP

Ftl:

<#assign ct = JspTaglibs["www.xyzabc.com/taglibs/customTags"]> 
Cuestiones relacionadas