2008-12-17 22 views
11

Actualmente estoy desarrollando una aplicación basada en OSGi (usando Equinox) intentando mavenizar un tutorial web que he encontrado en OSGi + Equinox. En este proyecto, hay paquetes que dependen de otros paquetes (el servicio de presupuesto depende del presupuesto). La fase de compilación tiene éxito, pero la fase del paquete no. Maven se queja de lo siguiente:Maven: OSGI, paquetes y proyectos de varios módulos

 
[INFO] [bundle:bundle] 
[ERROR] Error building bundle de.vogella.osgi:quote-service:bundle:0.0.1 : Unresolved references to [de.vogella.osgi.quote] by class(es) on the Bundle-Classpath[Jar:dot]: [de/vogella/osgi/quoteservice/Activator.class, de/vogella/osgi/quoteservice/QuoteService.class] 
[ERROR] Error(s) found in bundle configuration 

Entiendo el problema, pero no veo cómo hacerlo funcionar. Esta es pom de la cita:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
          http://maven.apache.org/maven-v4_0_0.xsd"> 

<parent> 
    <artifactId>osgi-first-app</artifactId> 
    <groupId>de.vogella.osgi</groupId> 
    <version>0.0.1</version> 
</parent> 

<modelVersion>4.0.0</modelVersion> 
<groupId>de.vogella.osgi</groupId> 
<artifactId>quote</artifactId> 
<packaging>bundle</packaging> 
<name>Quote Bundle</name> 
<version>0.0.1</version> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>maven-bundle-plugin</artifactId> 
      <version>1.4.3</version> 
      <extensions>true</extensions> 
      <configuration> 
       <instructions> 
        <_include>src/main/resources/META-INF/MANIFEST.MF</_include> 
       </instructions> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
</project> 

y manifiesto conjunto de la cita:

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: Quote Plug-in 
Bundle-SymbolicName: de.vogella.osgi.quote 
Bundle-Activator: de.vogella.osgi.quote.Activator 
Bundle-ActivationPolicy: lazy 
Bundle-RequiredExecutionEnvironment: J2SE-1.5 
Import-Package: org.osgi.framework;version="1.3.0" 
Export-Package: de.vogella.osgi.quote 

Entonces pom del presupuesto de servicio:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
          http://maven.apache.org/maven-v4_0_0.xsd"> 

<parent> 
    <artifactId>osgi-first-app</artifactId> 
    <groupId>de.vogella.osgi</groupId> 
    <version>0.0.1</version> 
</parent> 

<dependencies> 
    <dependency> 
     <groupId>de.vogella.osgi</groupId> 
     <artifactId>quote</artifactId> 
     <version>0.0.1</version> 
     <type>bundle</type> 
    </dependency> 
</dependencies> 

<modelVersion>4.0.0</modelVersion> 
<groupId>de.vogella.osgi</groupId> 
<artifactId>quote-service</artifactId> 
<packaging>bundle</packaging> 
<name>Quote Service Bundle</name> 
<version>0.0.1</version> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>maven-bundle-plugin</artifactId> 
      <version>1.4.3</version> 
      <extensions>true</extensions> 
      <configuration> 
       <instructions> 
        <_include>src/main/resources/META-INF/MANIFEST.MF</_include> 
       </instructions> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
</project> 

Y, por último manifiesto del presupuesto de servicio:

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: Quoteservice Plug-in 
Bundle-SymbolicName: de.vogella.osgi.quoteservice 
Bundle-Activator: de.vogella.osgi.quoteservice.Activator 
Bundle-ActivationPolicy: lazy 
Bundle-RequiredExecutionEnvironment: J2SE-1.5 
Import-Package: org.osgi.framework;version="1.3.0", \ 
de.vogella.osgi.quote;version="0.0.1" 

¿Hay algo mal? Gracias de antemano !

Respuesta

12

La respuesta es bastante simple: eliminé el manifiesto ya definido, y utilicé las entradas bnd en las instrucciones del complemento del paquete. Eso funciona !

+0

Estoy seguro de que este Q & A me será muy útil algún día, así que lo voté. ¡Gracias! –

3

Tycho está diseñado para manejar este tipo de problemas.

1

Escribí una herramienta llamada autoconstructor: http://code.google.com/p/auto-builder. Introspecta proyectos basados ​​en PDE y genera archivos Ant build; admite el cierre transitivo de dependencias y todo ese jazz.

Publiqué una reseña: http://empty-set.net/?p=9. Lo escribí porque las herramientas de Maven con las que jugué, cuando se integraron con PDE, no "simplemente funcionaron". Básicamente, quería hacer la codificación en PDE y tener un CI basado en Hudson sin ningún problema entre ellas.

Generar archivos Ant es agradable porque le brinda todos los beneficios de una herramienta de creación declarativa, pero le deja con una descripción de procedimiento de lo que está haciendo.

Estoy buscando más proyectos basados ​​en PDE para probarlo. Hay un par de repositorios RFC-0112 Bundle disponibles, y tengo un código para descargar dependencias. Si alguien está interesado, entonces podría integrar la descarga de dependencias con el auto-constructor.

Cuestiones relacionadas