0

我正在使用 Karaf 2.3.1。我正在关注 Apache Karaf 手册练习“扩展控制台”页面编号。105. 我按照所有指示同上,但有一些偏差。我能够将捆绑包 HelloShellCommand 加载到 Karaf 中。它给了我一个捆绑ID。但是命令“test.hello”不起作用。

karaf@root> osgi:classes 显示 org/apache/karaf.shell/samplesHelloShellCommand.class

karaf@root> test.hello 显示找不到命令

karaf@root> osgi:list 显示给定捆绑包的蓝图“失败”。

在以下步骤中,我确实偏离了“编译 JAR”部分中的给定指令:

  1. 让我们尝试构建 jar:我确实从 Eclipse 构建了 jar。文件-导出-Java-Jar 文件。

  2. 然后运行“mvn install”:这是我不明白 Maven 将如何使用 .jar 文件的地方。它正在寻找 pom.xml。所以,我进入根目录并运行“mvn install”。顺利通过了。

  3. osgi:install ..,也成功通过了。但我怀疑 Blueprint.xml 没有通过。

我需要帮助:

  1. 如何解决这个问题?

  2. 如何在 Karaf 中知道每个捆绑软件安装了哪些命令?

  3. 在步骤 1 中创建的 .jar 文件与使用 pom.xml 的“mvn install”不同。有什么我想念的吗?如何让 mvn 使用 .jar?

  4. 为什么 blueprint.xml 没有加载?

提前致谢

此外,我们有这个stackoverflow:

2013-07-27 19:44:30,733 | 错误 | rint 扩展器:2 | BlueprintContainerImpl
| 容器.BlueprintContainerImpl 393 | 7 - org.apache.aries.blueprint.core - 1.1.0 | 无法启动 bundle null 的蓝图容器

    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:570)[:1.7.0-ea]
at java.util.ArrayList.get(ArrayList.java:348)[:1.7.0-ea]
at org.apache.aries.blueprint.container.BlueprintContainerImpl.readDirectives
      (BlueprintContainerImpl.java:211)[7:org.apache.aries.blueprint.core:1.1.0]
at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun
      (BlueprintContainerImpl.java:283)[7:org.apache.aries.blueprint.core:1.1.0]
at org.apache.aries.blueprint.container.BlueprintContainerImpl.run     
       (BlueprintContainerImpl.java:261)[7:org.apache.aries.blueprint.core:1.1.0]
at java.util.concurrent.Executors$RunnableAdapter.call
       (Executors.java:471)[:1.7.0-ea]
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)[:1.7.0-ea]
at java.util.concurrent.FutureTask.run(FutureTask.java:166)[:1.7.0-ea]
at org.apache.aries.blueprint.container.ExecutorServiceWrapper.run
       (ExecutorServiceWrapper.java:106)[7:org.apache.aries.blueprint.core:1.1.0]
at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run
       (DiscardableRunnable.java:48)[7:org.apache.aries.blueprint.core:1.1.0]
at java.util.concurrent.Executors$RunnableAdapter.call
       (Executors.java:471)[:1.7.0-ea]
at java.util.concurrent.FutureTask$Sync.innerRun (FutureTask.java:334)[:1.7.0-ea]
at java.util.concurrent.FutureTask.run (FutureTask.java:166)[:1.7.0-ea]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201
       (ScheduledThreadPoolExecutor.java:178)[:1.7.0-ea]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run
       (ScheduledThreadPoolExecutor.java:292)[:1.7.0-ea]
at java.util.concurrent.ThreadPoolExecutor.runWorker
       (ThreadPoolExecutor.java:1110)[:1.7.0-ea]
at java.util.concurrent.ThreadPoolExecutor$Worker.run
       (ThreadPoolExecutor.java:603)[:1.7.0-ea]
at java.lang.Thread.run(Thread.java:717)[:1.7.0-ea]
4

1 回答 1

0

关于 1) 捆绑包是否已启动?您是否使用 osgi:install -s 启动?如果不是,您应该使用 start [bundleId] 启动捆绑包

关于 2) 在命令行发出帮助,它将列出所有可用的命令。使用 command -h 将为您提供命令本身的概述。

关于 3) 忘记从 eclipse 创建一个不起作用的 jar 文件。只有使用 maven pom 你才会有一个包含有效清单的包,除非你自己添加了这个(我在你的描述中没有看到)

关于 4) 您的捆绑包很可能没有启动,或者它不包含有效的清单,而后者又不会启动蓝图扩展程序。

除此之外,所有这些问题通常最好在 karaf 用户邮件列表中提出

编辑: 为了找到捆绑失败的原因,对具有给定 ID 的捆绑包执行 bundle:info 它还应该向您显示蓝图失败的原因。

于 2013-07-26T13:12:06.040 回答