当前位置: 首页 > 知识库问答 >
问题:

Karaf / Maven -无法解析:缺少要求osgi.wiring.package

胡云瀚
2023-03-14

我无法在 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]

捆绑包未安装。

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>

清单。Google GSON的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

我也试过

<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不能启动这个包。

共有3个答案

况繁
2023-03-14

我也有同样的问题:

org . OSGi . service . resolver . resolution异常:无法解析根:缺少要求[root]OSGi . identity;......[原因:无法解析com.mycompany.somemodule/1.0.0.SNAPSHOT:缺失要求

并解决了改变问题包的pom.xml(例如com.mycompany.somemodule/pom.xml):

            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <configuration>
                <instructions>
                    <Export-Package>
                        com.mycompany.module.entity,
                        com.mycompany.somemodule.entity.v1,
                        com.mycompany.somemodule.entity.v2,
                        com.mycompany.somemodule.util
                    </Export-Package>
                    <Private-Package>
                        com.mycompany.somemodule,
                        com.mycompany.somemodule.translator
                    </Private-Package>
                    <Bundle-Name>Some Module</Bundle-Name>
                    <Bundle-SymbolicName>${project.name}</Bundle-SymbolicName>
                    <Bundle-Version>${project.version}</Bundle-Version>
                </instructions>

最初,问题是我只公开了这些包的一个子集:

               ...
               <Export-Package>
                    com.mycompany.somemodule.entity.v2
                </Export-Package>
                <Private-Package>
                </Private-Package>
                ...
秦奇
2023-03-14

我有同样的问题:

“无法解决诸如此类的问题:缺少需求诸如此类osgi.wiring.package;(osgi.wiring.package=blah blah)未解决的需求:[诸如此类]osgi.willing.package;(osgi.williing.package=blah blah)]。

我在src/main/java中有一个激活器类。当我在Java中再创建一个包并将我的激活器放在这里时,问题就解决了。结果是src/main/java/oneMorePackage/MyActivator。

标签如下所示:

<Bundle-Activator>
       oneMorePackage.MyActivator
</Bundle-Activator>

<Private-Package>
      oneMorePackage
</Private-Package>
罗昊明
2023-03-14

我相信你有两个选择。

如果您的MANIFEST.MF中有Import-Package:com.google.gson; version="[2.3,3)",这意味着您希望从已部署的捆绑包导入某些包,而不是从嵌入式jar导入。在这种情况下,您应该首先部署gson-2.3.1.jar捆绑包(将此文件复制到部署文件夹),然后部署您的捆绑包。

如果您想将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收到此警告: 未安装捆绑软件。 在中开头: 我尝试使用以下方法进行更改: 但这给了我一个类似的错误: 的: 在谷歌GSON(版本Maven同时下载时,我建的软件包)是: 我也尝试过 现在已嵌入依赖项,

  • 我用maven-bundle-plugin创建了一个示例bundle项目,并创建了以下MANIFEST. MF: 现在,我已经添加了该捆绑包作为与maven-karaf-plugin组装构建的依赖项: 但是,由于出现以下错误,我无法生成: 无法执行目标组织。阿帕奇。卡拉夫。工具:karaf maven插件:4.0.7:项目示例上的程序集(默认程序集):karaf dist:无法构建程序集:无法解析

  • 我正在创建一个新的Karaf特性,它将包含几个包(jclouds)。我还有一个maven“superproject”(jclouds-all),它包含我需要的所有模块/包。 在定义特性时,是否可以只指定一个SuperProject的bundle,并自动解析所有具体的bundle,或者我需要在特性中列出所有的bundle?

  • 我正在apache Karaf 3.0.3中创建一个简单的Echo服务包,我有我的Activator类, 我可以通过Eclipse创建捆绑包,使用以下Manniest文件 我还有下面的POM文件 也是我的回声课 当我在karaf 3.0.3上部署此应用程序时,我面临以下问题 > 在尝试启动包时获取以下堆栈跟踪 错误:Bundle com。公司osgi[112]启动/停止捆绑包时出错。(org.os

  • 我有一个将数据源导出为OSGi服务的数据源功能: 作为创建和注册此数据源服务的ds功能的一部分,它还包含一个ping ds捆绑包,我可以使用它来测试数据源: 我有一个使用该数据源的蓝图包: 当我执行<code>功能:安装foo datasource测试功能 它似乎在抱怨它找不到已安装的OSGi服务的数据源: 奇怪的是,除了我编写的ping ds命令工作正常之外,如果我只安装了它抱怨的特性中的测试包

  • 在下面的示例中,OSGi解析和Maven依赖支持中所需的步骤似乎存在差异/重复。 我有一个jar,它依赖于外部第三方jar,在本例中时间为4J。 然后,我可以通过导入包并运行等方式在本地运行我的简单jar。 当导入OSGi时,我必须确保首先导入这个jar,通常使用PAX包装URL。 这对于一个jar依赖关系是可以的,但是当有多个依赖关系时又如何。我可以使用features.xml文件来收集这些JA