2015-05-27 17 views
19

Non riesco ad avviare un pacchetto in Karaf (versione 3.0.1).Karaf/Maven - Impossibile risolvere: manca il requisito osgi.wiring.package

Il pacchetto viene creato utilizzando Maven e importa gson.

ho incluso GSON in Maven come richiesto:

<dependency> 
    <groupId>com.google.code.gson</groupId> 
    <artifactId>gson</artifactId> 
    <version>2.3.1</version> 
</dependency> 

La build va bene. Tuttavia, quando distribuisco il pacchetto ricevo questo avviso da Karaf:

2015-05-27 12:45:07,371 | WARN | 49-19-bin/deploy | fileinstall      | 11 - org.apache.felix.fileinstall - 3.2.8 | Error while starting bundle: file:/Users/user/Documents/tools/MyBundle-1.0.0-SNAPSHOT.jar 
org.osgi.framework.BundleException: Unresolved constraint in bundle MyBundle [121]: Unable to resolve 121.13: missing requirement [121.13] osgi.wiring.package; (&(osgi.wiring.package=com.google.gson)(version>=2.3.0)(!(version>=3.0.0))) 
at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3974)[org.apache.felix.framework-4.2.1.jar:] 
at org.apache.felix.framework.Felix.startBundle(Felix.java:2037)[org.apache.felix.framework-4.2.1.jar:] 
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:955)[org.apache.felix.framework-4.2.1.jar:] 
at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundle(DirectoryWatcher.java:1263)[11:org.apache.felix.fileinstall:3.2.8] 
at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundles(DirectoryWatcher.java:1235)[11:org.apache.felix.fileinstall:3.2.8] 
at org.apache.felix.fileinstall.internal.DirectoryWatcher.startAllBundles(DirectoryWatcher.java:1224)[11:org.apache.felix.fileinstall:3.2.8] 
at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:519)[11:org.apache.felix.fileinstall:3.2.8] 
at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:308)[11:org.apache.felix.fileinstall:3.2.8] 

Il pacchetto non è installato.

Il Import-Package nel MANIFEST.MF inizia con:

Import-Package: com.google.gson;version="[2.3,3)" 

Ho provato a cambiarlo con:

Import-Package: com.google.code.gson;version="[2.3,3)" 

ma mi dà un errore simile:

missing requirement [121.13] osgi.wiring.package; (&(osgi.wiring.package=com.google.code.gson) 

Il pom.xml :

<?xml version="1.0" encoding="UTF-8"?> 
<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/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 

<parent> 
    <groupId>groupid</groupId> 
    <artifactId>artifactid</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
</parent> 

<groupId>groupid</groupId> 
<artifactId>MyBundle</artifactId> 
<version>1.0.0-SNAPSHOT</version> 

<packaging>bundle</packaging> 

<name>MyBundle</name> 
<description>MyBundle</description> 

<properties> 
    <skipTests>true</skipTests> 
</properties> 

<dependencies> 
    ... 
    <dependency> 
     <groupId>org.apache.felix</groupId> 
     <artifactId>org.apache.felix.http.jetty</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.json</groupId> 
     <artifactId>com.springsource.org.json</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.servicemix.bundles</groupId> 
     <artifactId>org.apache.servicemix.bundles.commons-httpclient</artifactId> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.postgresql</groupId> 
     <artifactId>postgresql</artifactId> 
     <version>9.4-1201-jdbc41</version> 
    </dependency> 
    <dependency> 
     <groupId>com.google.code.gson</groupId> 
     <artifactId>gson</artifactId> 
     <version>2.3.1</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-codec</groupId> 
     <artifactId>commons-codec</artifactId> 
     <version>1.10</version> 
    </dependency> 
</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>maven-bundle-plugin</artifactId> 
      <extensions>true</extensions> 
      <configuration> 
       <instructions> 
        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> 
       </instructions> 
      </configuration> 
     </plugin> 
      <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <configuration> 
        <skipTests>${skipTests}</skipTests> 
      </configuration> 
      </plugin> 
    </plugins> 
</build> 

</project> 

La MANIFEST.MF di Google GSON (i download Maven versione quando costruire il fascio) è:

Manifest-Version: 1.0 
Export-Package: com.google.gson;version=2.3.1, com.google.gson.annotat 
ions;version=2.3.1, com.google.gson.reflect;version=2.3.1, com.google 
.gson.stream;version=2.3.1, com.google.gson.internal;version=2.3.1, c 
om.google.gson.internal.bind;version=2.3.1 
Bundle-ClassPath: . 
Built-By: inder 
Bundle-Name: Gson 
Created-By: Apache Maven 3.2.1 
Bundle-RequiredExecutionEnvironment: J2SE-1.5, JavaSE-1.6, JavaSE-1.7, 
    JavaSE-1.8 
Bundle-Vendor: Google Gson Project 
Bundle-ContactAddress: http://code.google.com/p/google-gson/ 
Build-Jdk: 1.6.0_65 
Bundle-Version: 2.3.1 
Bundle-ManifestVersion: 2 
Bundle-Description: Google Gson library 
Bundle-SymbolicName: com.google.gson 
Archiver-Version: Plexus Archiver 

Ho anche provato con

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>maven-bundle-plugin</artifactId> 
      <extensions>true</extensions> 
      <configuration> 
       <instructions> 
        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> 
        <Import-Package>*;resolution:=optional</Import-Package> 
        <Embed-Dependency>*</Embed-Dependency> 
        <Embed-Transitive>true</Embed-Transitive> 
       </instructions> 
      </configuration> 
     </plugin> 
      <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <configuration> 
       <skipTests>${skipTests}</skipTests> 
      </configuration> 
      </plugin> 
    </plugins> 
</build> 

Ora le dipendenze sono incorporati ma Karaf non può avvia il pacchetto.

+0

Siete a conoscenza di mismatch in pacchetti tra ' com.google.code.gson' e 'osgi.wiring.package = com.google.gson'? – javabrett

+0

Sì, grazie. Ho cercato il pacchetto 'com.google.gson' ma, a parte questo, c'è solo" com.google.code.gson ". Tuttavia, non so perché il pacchetto richiesto sia "com.google.gson". Qualche idea? – gc5

+0

Sembra che dovrebbe essere OK. Puoi pubblicare la configurazione del tuo bundle da yout POM, 'Import-Package' ecc.? – javabrett

risposta

27

Credo che tu abbia due opzioni qui.

Se si dispone di Import-Package: com.google.gson;version="[2.3,3)" nel proprio MANIFEST.MF, ciò significa che si desidera che un pacchetto venga importato da un pacchetto distribuito, non da un jar incorporato. In questo caso, è necessario prima distribuire il pacchetto gson-2.3.1.jar (copiare questo file nella cartella di distribuzione) e quindi distribuire il pacchetto.

Se si desidera incorporare la libreria GSON come un semplice non-OSGi jar dipendenza, anche questo può essere fatto, ma poi si deve escludere i suoi pacchetti da Import-Package:

<plugin> 
     <groupId>org.apache.felix</groupId> 
     <artifactId>maven-bundle-plugin</artifactId> 
     <extensions>true</extensions> 
     <configuration> 
      <instructions> 
       <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> 
       <Import-Package>!com.google.gson,*</Import-Package> 
       <Embed-Dependency>gson</Embed-Dependency> 
      </instructions> 
     </configuration> 
    </plugin> 
+0

Fantastico, ho usato la seconda soluzione. Grazie – gc5

+0

La soluzione Embed-Dependecy ha risolto un problema simile risolvendo org.apache.derby.jdbc. Grazie! – Cesar

+2

Penso che ci dovrebbero essere alcune modifiche del tag , l'ho provato io stesso. ! Com.google.gson, *, altrimenti com.google.gson non sarà escluso. –

Problemi correlati