2009-10-20 13 views
8

Quiero implementar uno de mis paquetes OSGi con una estructura de paquete de guerra para que Struts lo reconozca como una aplicación web. Uso Maven, así que incluyo el paquete WAR y tengo el complemento Maven para crear el manifiesto compatible con OSGi.¿Cómo puedo combinar el empaque WAR y la creación del paquete OSGi en Maven?

El problema es que los dos no trabajan juntos, por lo que el plug-in paquete no es consciente de que los archivos de clase se encuentran ahora en la subcarpeta classes/ y los frascos incluido están en lib/, por lo que crea un Bundle-classpath encabezado incorrecto. Podría agregar manualmente el encabezado correcto a mi pom.xml, pero me gustaría tener ese don de forma automática. ¿Cómo puedo hacer eso?

+0

Posible duplicado de [Maven Web Project con Apache Felix Plugin] (https://stackoverflow.com/questions/19272627/maven-web-project-with-apache-felix-plugin) – bigbadmouse

Respuesta

18

Una forma de (más o menos) lograr esto se describe en la página Wiki OPS4J - "Getting the benefits of maven-bundle-plugin in other project types".

Puede configurar la incrustación de dependencias y la directiva Bundle-ClassPath en su pom.xml para que coincida con las ubicaciones utilizadas por el complemento WAR. El plugin maven-bundle generará encabezados de manifiesto correctos.

Las instrucciones para el experto-haz-plugin podría tener este aspecto:

<instructions> 
    <Bundle-ClassPath>.,WEB-INF/classes,{maven-dependencies}</Bundle-ClassPath> 

    <Embed-Directory>WEB-INF/lib</Embed-Directory> 
    <Embed-Dependency>*;scope=compile|runtime</Embed-Dependency> 
    <Embed-Transitive>true</Embed-Transitive> 
    <!-- ... --> 
</instructions> 

ETA: Al utilizar este enfoque, descubrí dos cosas dignas de mención:

  • la el complemento del paquete se quejará de los directorios WEB-INF que faltan, porque cuando se ejecuta el objetivo del manifiesto, el complemento de guerra aún no los ha creado (solo se ejecuta a la fase ter)
  • a pesar de que no tiene sentido para la aplicación de web real, el Bundle-ClassPath Directiva necesidad contiene "", o el desorden paquete plugin hasta la cabecera Import-Packages. Encontré esto en algún problema de JIRA a través de Google, pero ya no puedo encontrar la URL.

Aparte de eso, funciona bien.

+0

+1 for '{maven- dependencias} '(ver http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html#ApacheFelixMavenBundlePlugin%28BND%29-Embeddingdependencies) –

+0

Genial. De alguna manera sabía esto, pero no había visto la directiva 'Embed-Directory' antes. –

-1

puede encontrar this answer esclarecedor, ya que el OP también ha publicado la respuesta que encontró para sí mismo a esta misma pregunta.

Proporciona una solución para incluir contenido de estilo web.

+2

Un enlace a una solución es bienvenido, pero asegúrese de que su respuesta sea útil sin él: [agregue contexto alrededor del enlace] (// meta.stackexchange.com/a/8259) para que los demás usuarios tengan una idea de lo que es y por qué está allí, luego cita la parte más relevante de la página a la que estás enlazando en caso de que la página objetivo no esté disponible. [Las respuestas que son poco más que un enlace se pueden eliminar.] (// stackoverflow.com/help/deleted-answers) – Bugs

+0

¿Sabes qué? No voy a molestar en el futuro. Cualquier entusiasmo que tuve para contribuir (en lugar de simplemente tomar ayuda en silencio y no devolver nada) se ha evaporado por completo hoy – bigbadmouse

+0

¿Cómo es eso? Su entusiasmo no parece ser tan bueno si lo deja todo solo porque alguien hizo una simple solicitud de mejora.¿No estás interesado en respuestas de alta calidad? Es posible que desee reconsiderar esto. – Floern

Cuestiones relacionadas