2008-12-17 12 views
11

Obecnie pracuję nad aplikacją opartą na OSGi (używając Equinox), próbując odkryć internetowy tutorial, który znalazłem w OSGi + Equinox. W tym projekcie istnieją pakiety zależne od innych pakietów (usługa cytowania zależy od oferty). Faza kompilacji kończy się pomyślnie, ale faza pakietu nie. Maven narzeka, że:Maven: OSGI, pakiety i projekty wielomodułowe

 
[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 

Rozumiem problem, ale nie wiem, jak go uruchomić. To cytat za pom:

<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> 

i cytat za pakiet oczywisty:

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 

Następnie pom cytat-Service za:

<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> 

I wreszcie manifest cytat-Service za:

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" 

Czy coś jest nie tak? Z góry dziękuję !

Odpowiedz

12

Odpowiedź jest dość prosta: usunąłem już zdefiniowany manifest i użyłem wpisów bnd w instrukcjach wtyczki pakietu. To działa !

+0

Jestem pewien, że te pytania i odpowiedzi będą dla mnie bardzo przydatne pewnego dnia, więc głosowałem za tym. Dzięki! –

3

Tycho jest przeznaczony do obsługi tego typu problemów.

1

Napisałem narzędzie o nazwie auto-builder: http://code.google.com/p/auto-builder. Integruje projekty oparte na PDE i generuje pliki kompilacji Ant; wspiera przechodnie zamknięcie przez zależności i cały ten jazz.

Napisałem komentarz: http://empty-set.net/?p=9. Napisałem go, ponieważ narzędzia Maven, z którymi grałem, po zintegrowaniu z PDE, nie działały "po prostu". Zasadniczo chciałem zrobić kodowanie w PDE i mieć CI oparty na Hudson bez żadnego zamieszania pomiędzy.

Generowanie plików Ant jest dobre, ponieważ daje wszystkie korzyści z deklaratywnego narzędzia do kompilacji, ale pozostawia ci opis proceduralny tego, co robi.

Szukam więcej projektów opartych na PDE, aby go przetestować. Istnieje kilka repozytoriów pakietów RFC-0112 i mam kod do pobierania zależności. Jeśli ktokolwiek jest zainteresowany, to mogę zintegrować pobieranie zależności z auto-builderem.