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

OSGI捆绑包在Apache Servicemix中没有开始

江雅懿
2023-03-14

我正在开发超文本传输协议客户端应用程序作为一个OSGI捆绑项目,我已经使用apache maven创建项目文件夹结构使用下面的命令。

mvn archetype:generate -DarchetypeGroupId=org.apache.karaf.archetypes -DarchetypeArtifactId=karaf-blueprint-archetype -DarchetypeVersion=2.3.7 -DgroupId=com.techiyhub -DartifactId=integration.sms -Dversion=1.0-SNAPSHOT -Dpackage=com.techiyhub.integration.sms

上面的命令创建了项目文件夹结构,因为我使用的是基于httpclient的应用程序。我在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>
<groupId>com.techiyhub</groupId>
<artifactId>integration.sms</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>bundle</packaging>
<name>integration.sms Blueprint Bundle</name>
<description>integration.sms OSGi blueprint bundle project.</description>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>2.4.0</version>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                    <Bundle-Version>${project.version}</Bundle-Version>
                    <Export-Package>
                        com.techiyhub.integration.sms*;version=${project.version}
                    </Export-Package>
                    <Import-Package>
                        *
                    </Import-Package>
                </instructions>
            </configuration>
        </plugin>
    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore</artifactId>
        <version>4.3.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.3.5</version>
    </dependency>       
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.0.4</version>
    </dependency>
    <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>1.6</version>
    </dependency>
</dependencies> 

我执行以下命令,

根项目上进行构建

它在本地maven存储库中创建了所需的jar文件。

问题从这里开始。我试图在ApacheServiceMix中部署捆绑包,但在启动捆绑包时出现了错误

我在servicemix shell中执行了以下命令

osgi:安装mvn:com.techiyhub/integration.sms/1.0-SNAPSHOT

它是用bundle id安装的,然后我执行下面的命令

osgi:启动302

它给出了以下错误

执行命令时出错:启动捆绑包时出错:无法启动捆绑包302:捆绑包集成中存在未解决的约束。sms[302]:无法解析302.0:miss ing requirement[302.0]osgi。装电线。包裹(osgi.willing.package=org.apache.http)

完整的错误堆栈跟踪如下

2015-10-26 14:33:12,551 | ERROR | l Console Thread | Console                          | 22 - org.apache.karaf.shell.cons
ole - 2.4.3 | Exception caught while executing command
org.apache.karaf.shell.console.MultiException: Error starting bundles:
        Unable to start bundle 302: Unresolved constraint in bundle integration.sms [302]: Unable to resolve 302.0: miss
ing requirement [302.0] osgi.wiring.package; (osgi.wiring.package=org.apache.http)
        at org.apache.karaf.shell.console.MultiException.throwIf(MultiException.java:91)
        at org.apache.karaf.shell.osgi.StartBundle.doExecute(StartBundle.java:43)
        at org.apache.karaf.shell.osgi.BundlesCommand.doExecute(BundlesCommand.java:37)
        at org.apache.karaf.shell.console.OsgiCommandSupport.execute(OsgiCommandSupport.java:38)
        at org.apache.felix.gogo.commands.basic.AbstractCommand.execute(AbstractCommand.java:35)
        at sun.reflect.GeneratedMethodAccessor28.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.7.0_80]
        at java.lang.reflect.Method.invoke(Method.java:606)[:1.7.0_80]
        at org.apache.aries.proxy.impl.ProxyHandler$1.invoke(ProxyHandler.java:54)[16:org.apache.aries.proxy.impl:1.0.4]

        at org.apache.aries.proxy.impl.ProxyHandler.invoke(ProxyHandler.java:119)[16:org.apache.aries.proxy.impl:1.0.4]
        at org.apache.karaf.shell.console.commands.$BlueprintCommand22803378.execute(Unknown Source)[22:org.apache.karaf
.shell.console:2.4.3]
        at org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:78)[22:org.apache.karaf.shell.console:2.
4.3]
        at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:477)[22:org.apache.karaf.shell.console:2.4.3]
        at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:403)[22:org.apache.karaf.shell.console:2.
4.3]
        at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)[22:org.apache.karaf.shell.console:2.4.3]
        at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:183)[22:org.apache.karaf.shell.console:2.4.3]
        at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:120)[22:org.apache.karaf.shell.console:2.4.3]
        at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:92)[22:org.apache.karaf.shel
l.console:2.4.3]
        at org.apache.karaf.shell.console.jline.Console.run(Console.java:195)[22:org.apache.karaf.shell.console:2.4.3]
        at org.apache.karaf.shell.console.jline.DelayedStarted.run(DelayedStarted.java:79)[22:org.apache.karaf.shell.con
sole:2.4.3]
Caused by: java.lang.Exception: Unable to start bundle 302: Unresolved constraint in bundle integration.sms [302]: Unabl
e to resolve 302.0: missing requirement [302.0] osgi.wiring.package; (osgi.wiring.package=org.apache.http)
        at org.apache.karaf.shell.osgi.StartBundle.doExecute(StartBundle.java:39)
        ... 18 more
Caused by: org.osgi.framework.BundleException: Unresolved constraint in bundle integration.sms [302]: Unable to resolve
302.0: missing requirement [302.0] osgi.wiring.package; (osgi.wiring.package=org.apache.http)
        at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4002)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:2045)
        at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:976)
        at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:963)
        at org.apache.karaf.shell.osgi.StartBundle.doExecute(StartBundle.java:37)
        ... 18 more


        Caused by: org.osgi.framework.BundleException: Unresolved constraint in bundle : Unable to resolve: missing requirement [302.0] osgi.wiring.package;(osgi.wiring.package=org.apache.http)

请帮我解决这个问题。

共有1个答案

包沈义
2023-03-14

当你创建一个bundle时,maven bundle插件会扫描你项目的类文件,寻找所有使用过的包。它在清单中为这些文件创建导入包语句。

然后在运行时,您必须确保还安装了运行包所需的所有库。错误消息将帮助您找到要安装的正确捆绑包。因此,在您的情况下,您必须安装一个导出包org的捆绑包。阿帕奇。http。

在你的情况下,这些是:

mvn:org.apache.httpcomponents/httpcore-osgi/4.3.3
mvn:org.apache.httpcomponents/httpclient-osgi/4.3.6
 类似资料:
  • 我是OSGi的新手。我正在使用Apache Felix。我已经构建了一个捆绑包,并且具有依赖性。当我尝试使用启动它会给我这个错误。 org . OSGi . framework . bundle exception:无法解析lk . ucsc . research . belly runner[20](R 20.0):缺失需求[lk . ucsc . research . belly runner

  • 我试图在Felix中添加一个新的OSGI包(没有Karaf)作为ActiveMQ客户端(消息发送方)。 ActiveMQ客户端在非OSGI环境中运行良好。但当我在Felix中使用相同的代码(稍加修改)时,它会抛出以下错误: org.osgi.framework.捆绑异常:无法解决com.packtpub.felix.bookshelf-库存-impl-mock[7](R 7.3):缺少需求[com

  • 我已经用声明性服务(DS)组件定义定义了一个OSGi包(),指定了一个导出的服务、一个激活方法和一个停用方法。 在Activate方法的主体中,我需要访问一个文件,该文件不在文件系统中,但绑定在OSGi捆绑包中。在activate方法期间,使用。 这基本上是可行的,但有一种情况是不可行的。在我的应用程序中,

  • 我使用EclipseIndigo使用OSGiJava框架开发了一些包。有一个主捆绑包,它依赖于其他捆绑包,并且具有要运行的主程序。如果我尝试在Eclipse中运行所有捆绑包,一切都正常工作,但是如果我将每个捆绑包保存为一个JAR,并在命令行中启动OSGi框架,当我尝试启动主捆绑包时,会出现异常<code>NoClassDefFoundError。找不到的类是依赖项。包的其余部分处于活动状态,主包刚

  • 我在Apache Felix上开发了一个OSGI捆绑包。捆绑包公开不同的API来实时管理YouTube事件。捆绑包服务将通过REST服务公开,并将由用户通过Web浏览器(chrome、safari、mozilla)使用。 我为该帐户生成凭据Google(client_secret和client_id)并将其保存在文件中,然后我的代码使用此凭据并正常工作。 我使用这个类(在youtube文档中找到)

  • 问题内容: OSGi无法找到我的DLL文件,而且我似乎也找不到原因。 目前,我的包根目录中有DLL文件(),我也尝试将其放在目录中。 有关捆绑商品的清单看起来像这样: 然后在我的JNA界面中,执行loadLibrary(根据文档): 然后在另一个类中,我尝试使用JNA接口 我通过另一个捆绑软件提供了JNA(该捆绑软件输出com.sun.jna和上面导入的其他软件包),但也尝试过使用此处定义的捆绑软