Karaf / Maven – 无法解决:缺少要求osgi.wiring.package

我无法在Karaf(版本3.0.1)中启动捆绑包。

该捆绑包使用maven构建,并导入gson 。

我根据需要在maven中包含了gson:

 com.google.code.gson gson 2.3.1  

构建顺利。 但是,在部署捆绑包时,我从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] 

捆绑包未安装。

MANIFEST.MFImport-Package以:

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

我试着改变它:

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

但它给了我一个类似的错误:

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

pom.xml

   4.0.0  groupid artifactid 0.0.1-SNAPSHOT  groupid MyBundle 1.0.0-SNAPSHOT bundle MyBundle MyBundle  true   ...  org.apache.felix org.apache.felix.http.jetty   org.json com.springsource.org.json   org.apache.servicemix.bundles org.apache.servicemix.bundles.commons-httpclient test   org.postgresql postgresql 9.4-1201-jdbc41   com.google.code.gson gson 2.3.1   commons-codec commons-codec 1.10      org.apache.felix maven-bundle-plugin true   ${project.artifactId}     org.apache.maven.plugins maven-surefire-plugin  ${skipTests}      

Google GSON的MANIFEST.MF (我在构建软件包时下载的版本maven)是:

 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 

我也尝试过

    org.apache.felix maven-bundle-plugin true   ${project.artifactId} *;resolution:=optional * true     org.apache.maven.plugins maven-surefire-plugin  ${skipTests}     

现在嵌入了依赖项,但Karaf无法启动捆绑包。

我相信你有两个选择。

如果您的MANIFEST.MFImport-Package: com.google.gson;version="[2.3,3)" ,则表示您希望从已部署的包中导入某个包,而不是从嵌入式jar中导入。 在这种情况下,您应首先部署gson-2.3.1.jar包(将此文件复制到deploy文件夹),然后部署您的包。

如果你想将gson库作为一个简单的非OSGi jar依赖项嵌入,也可以这样做,但是你必须从Import-Package排除它Import-Package

   org.apache.felix maven-bundle-plugin true   ${project.artifactId} !com.google.gson,* gson