【问题标题】:Cannot start bundle- missing requirement(osgi.wiring.package)无法启动缺少捆绑包的要求(osgi.wiring.package)
【发布时间】:2018-05-10 12:39:43
【问题描述】:

我是 Apache karaf 和 OSGI 的新手。我正在尝试编写和运行一个非常简单的包。但是在启动该捆绑包时出现此错误:

执行命令时出错:在捆绑包上执行命令时出错:无法执行 解决 karaf [86](R 86.0):缺少要求 [karaf [86](R 86.0)] osgi.wiring.package; (osgi.wiring.package=bundle) 未解决 要求:[[karaf [86](R 86.0)] osgi.wiring.package; (osgi.wiring.package=bundle)]

我的 pom 是: 4.0.0

<groupId>com</groupId>
<artifactId>karaf</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>bundle</packaging>

<name>karaf Bundle</name>
<description>
    karaf OSGi bundle project.
</description>

<properties>
    <maven-bundle-plugin.version>2.5.4</maven-bundle-plugin.version>
    <osgi.version>6.0.0</osgi.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.osgi</groupId>
        <artifactId>org.osgi.core</artifactId>
        <version>${osgi.version}</version>

        <scope>provided</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>${maven-bundle-plugin.version}</version>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                    <Bundle-Version>${project.version}</Bundle-Version>
                    <Bundle-Activator>bundle.Activator</Bundle-Activator>
                    <Export-Package>
                        bundle*;version=${project.version}
                    </Export-Package>
                    <Import-Package>
                         org.osgi.framework,*
                    </Import-Package>
                </instructions>
            </configuration>
        </plugin>
    </plugins>
</build>

我的 manifest.mf 文件在这里。

> Manifest-Version: 1.0
Bnd-LastModified: 1394131053386
Bundle-Copyright: Copyright (c) OSGi Alliance (2000, 2014). All Rights R
 eserved.
Bundle-Description: OSGi Core Release 6, Interfaces and Classes for use 
 in compiling bundles.
Bundle-License: http://opensource.org/licenses/apache2.0.php; link="http
 ://www.apache.org/licenses/LICENSE-2.0"; description="Apache License, V
 ersion 2.0"
Bundle-ManifestVersion: 2
Bundle-Name: osgi.core
Bundle-SymbolicName: osgi.core
Bundle-Vendor: OSGi Alliance
Bundle-Version: 6.0.0.201403061837
Created-By: 1.6.0_45 (Sun Microsystems Inc.)
DynamicImport-Package: *
Export-Package: org.osgi.dto;version="1.0",org.osgi.resource;version="1.
 0",org.osgi.resource.dto;version="1.0";uses:="org.osgi.dto",org.osgi.fr
 amework;version="1.8",org.osgi.framework.dto;version="1.8";uses:="org.o
 sgi.dto",org.osgi.framework.hooks.bundle;version="1.1";uses:="org.osgi.
 framework",org.osgi.framework.hooks.resolver;version="1.0";uses:="org.o
 sgi.framework.wiring",org.osgi.framework.hooks.service;version="1.1";us
 es:="org.osgi.framework",org.osgi.framework.hooks.weaving;version="1.1"
 ;uses:="org.osgi.framework.wiring",org.osgi.framework.launch;version="1
 .2";uses:="org.osgi.framework",org.osgi.framework.namespace;version="1.
 1";uses:="org.osgi.resource",org.osgi.framework.startlevel;version="1.0
 ";uses:="org.osgi.framework",org.osgi.framework.startlevel.dto;version=
 "1.0";uses:="org.osgi.dto",org.osgi.framework.wiring;version="1.2";uses
 :="org.osgi.framework,org.osgi.resource",org.osgi.framework.wiring.dto;
 version="1.2";uses:="org.osgi.dto,org.osgi.resource.dto",org.osgi.servi
 ce.condpermadmin;version="1.1.1";uses:="org.osgi.framework,org.osgi.ser
 vice.permissionadmin",org.osgi.service.packageadmin;version="1.2";uses:
 ="org.osgi.framework",org.osgi.service.permissionadmin;version="1.2",or
 g.osgi.service.startlevel;version="1.1";uses:="org.osgi.framework",org.
 osgi.service.url;version="1.0",org.osgi.util.tracker;version="1.5.1";us
 es:="org.osgi.framework"
Import-Package: javax.security.auth.x500;resolution:=optional
Tool: Bnd-2.2.0.20130927-173453

【问题讨论】:

  • 可以this帮忙吗?

标签: maven osgi apache-karaf apache-felix osgi-bundle


【解决方案1】:

让我们分解一下:“缺少要求”仅仅意味着您的包已安装到 OSGi 框架中,但它有一个已安装的任何其他包都无法满足的要求。

未解决的需求位于命名空间osgi.wiring.package 中,这意味着这种需求是Java 包导入,即您在包的清单中看到的Import-Package。换句话说,您的包导入了一个包,而没有其他包导出该包。

最后一点,(osgi.wiring.package=bundle),是一个过滤器,它表达了你的包所需的确切包名称。在这种情况下,您的 bundle 显然导入了一个名为“bundle”的包。

这有点奇怪,这意味着您可能在构建捆绑包的方式上犯了错误。如果您发布有关如何构建此捆绑包的详细信息会有所帮助。

【讨论】:

  • 嗨,尼尔,我已经添加了我的 pom.xml 详细信息。但是在我的 org.osgi jar 文件中,我有 osgi.framework.wiring 包。那么,知道为什么它会给出一个缺失的错误吗?
  • 您发布了 osgi.core-6.0.0.jar 的清单,而不是您自己的包。另外你为什么要导出一个名为“bundle”的包??您的 Java 源代码中是否有一个名为“bundle”的包?这一切都很难理解,我认为你需要退后一步,告诉我们你真正想要做什么。
  • @pres 否决你的问题,因为你似乎有lost interest in solving it
  • 感谢您的详细解释。在我修复了我的 POM 之后,我做了一个 Maven “清理”,然后是一个 Maven “包”,以确保插件没有将条目添加到我的清单文件中。
  • 检查 pom.xml 中的构建。我遇到的问题是 Bundle-Activator 的条目是错误的,而 Export-Package 是错误的。
猜你喜欢
  • 2019-10-11
  • 2015-07-28
  • 2017-09-28
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 2019-09-15
  • 1970-01-01
  • 2017-09-26
相关资源
最近更新 更多