我无法在Karaf(版本3.0.1)中启动捆绑包。
该捆绑包使用maven构建,并导入gson。
我根据需要将gson包括在maven中:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.3.1</version>
</dependency>
构建顺利。但是,在部署捆绑软件时,我从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]
未安装捆绑软件。
在Import-Package
中MANIFEST.MF
开头:
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
:
<?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>
在MANIFEST.MF
谷歌GSON(版本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
我也尝试过
<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>
现在已嵌入依赖项,但Karaf无法启动捆绑包。
我相信您在这里有两个选择。
如果你有Import-Package: com.google.gson;version="[2.3,3)"
你的MANIFEST.MF
,这意味着你需要一些包从部署包进口,而不是从嵌入的罐子。在这种情况下,您应该首先部署gson-2.3.1.jar
捆绑软件(将此文件复制到deploy文件夹),然后再部署捆绑软件。
如果您想将gson库作为简单的非OSGi jar依赖项进行嵌入,也可以这样做,但随后必须从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>
我无法在 Karaf(版本 3.0.1)中启动捆绑包。 该捆绑包使用maven构建,并导入gson。 我根据需要将gson包含在maven中: 构建运行良好。但是,在部署捆绑包时,我收到了来自Karaf的警告: 捆绑包未安装。 中的导入包开头为: 我试图改变它: 但它给了我一个类似的错误: pom.xml代码: (我构建捆绑包时maven下载的版本)是: 我也试过 现在依赖项已经嵌入,但是Kara
我用maven-bundle-plugin创建了一个示例bundle项目,并创建了以下MANIFEST. MF: 现在,我已经添加了该捆绑包作为与maven-karaf-plugin组装构建的依赖项: 但是,由于出现以下错误,我无法生成: 无法执行目标组织。阿帕奇。卡拉夫。工具:karaf maven插件:4.0.7:项目示例上的程序集(默认程序集):karaf dist:无法构建程序集:无法解析
我有一个将数据源导出为OSGi服务的数据源功能: 作为创建和注册此数据源服务的ds功能的一部分,它还包含一个ping ds捆绑包,我可以使用它来测试数据源: 我有一个使用该数据源的蓝图包: 当我执行<code>功能:安装foo datasource测试功能 它似乎在抱怨它找不到已安装的OSGi服务的数据源: 奇怪的是,除了我编写的ping ds命令工作正常之外,如果我只安装了它抱怨的特性中的测试包
我有一个使用OSGi-(felix)、SpringDM、hibernate和maven的项目。当我安装捆绑包时,它是正常的,当我运行捆绑包id时的输出是: 这是我在启动此捆绑包时看到的: 这是我的beans.xml: 这是我的pom文件: 此外,在felix中存在一个完整的捆绑错误。
我得到了<code>缺少的要求osgi.wiring。包…部署包时出错,缺少的包来自库(maven依赖项),因此包在其<code>类路径中 我的理解是:当使用来自另一个<code>OSGI捆绑包,但事实并非如此,这只是一个自制的库(没有部署到OSGI容器,甚至没有捆绑包),所以我一定不太明白
这是一个简单的(v1.4.0),我所做的只是指定 因此错误: 执行命令时出错:无法解析根:缺少需求[root]osgi。身份奥斯基。身份=我的特征;类型=卡拉夫。特色version=“[2.0.0,2.0.0]”;过滤器:=”( 我的印象是,在一个特性中指定我的捆绑包并进行安装会将它们全部拉到karaf中。 我该如何解决这个问题?