wiring requirement missing google descargar code java maven gson apache-karaf

java - requirement - maven gson 2.8 2



Karaf/Maven-No se puede resolver: falta el requisito osgi.wiring.package (1)

No puedo iniciar un paquete en Karaf (versión 3.0.1).

El paquete se construye utilizando maven e importa gson .

Incluí gson en maven como se requiere:

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

La construcción va bien. Sin embargo, al implementar el paquete recibo esta advertencia de 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]

El paquete no está instalado.

El Import-Package en MANIFEST.MF comienza con:

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

Intenté cambiarlo con:

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

Pero me da un error similar:

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

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

El MANIFEST.MF de Google GSON (la versión maven se descarga cuando compilo el paquete) es:

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

Yo también probé 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>

Ahora las dependencias están integradas pero Karaf no puede iniciar el paquete.


Creo que tienes dos opciones aquí.

Si tiene Import-Package: com.google.gson;version="[2.3,3)" en su MANIFEST.MF , esto significa que desea que un paquete sea importado desde un paquete implementado, no desde un jar integrado. En este caso, primero debe implementar el gson-2.3.1.jar (copie este archivo en la carpeta de implementación) y luego implemente el paquete.

Si desea incrustar la biblioteca gson como una simple dependencia jar no OSGi, esto también se puede hacer, pero luego tiene que excluir sus paquetes de 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>