【问题标题】:OSGi - How to get a new bundle to run via an existing bndrun fileOSGi - 如何通过现有的 bndrun 文件运行新的捆绑包
【发布时间】:2020-01-06 12:10:44
【问题描述】:

我是 Java OSGi 框架的新手,并且继承了一个需要新功能的项目。该项目有多个捆绑包,并设置为在 Eclipse 上运行所有必需的插件等。

有一个 start.bndrun 文件,当通过 Eclipse 上的“运行 OSGi”选项运行时,它会启动主应用程序并通过它们的 activate() 函数运行所有包。 p>

问题是,当我创建自己的简单组件和如下捆绑包时,ExampleProviderImpl,导出所需的包等并尝试将其添加到 start.bndrun 的“运行捆绑包”选项中,它似乎没有运行。

package Test;

import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;

@Component
public class ExampleProviderImpl
{

   @Activate
   void activate()
   {
      System.out.println("HELLO FROM ExampleProviderImpl.class");
      System.out.println("HELLO FROM ExampleProviderImpl.class");
      System.out.println("HELLO FROM ExampleProviderImpl.class");
      System.out.println("HELLO FROM ExampleProviderImpl.class");
      System.out.println("HELLO FROM ExampleProviderImpl.class");
   }
}

【问题讨论】:

  • 你能检查一下你的类是否真的在 bundle jar 中结束了吗?要检查的另一件事是。您是否正在运行 scr(声明性服务扩展程序)捆绑包?
  • 您是在 Felix 还是 Equinox 上运行?在 Equinox 中,您必须将标题“Bundle-ActivationPolicy:lazy”添加到 bnd 文件中。否则 DS/SCR 不会自动启动你的包和服务。

标签: java osgi osgi-bundle bnd bndtools


【解决方案1】:

我假设

它似乎没有运行。

你的意思是什么都没有打印出来。如果是这样,那很可能是因为组件默认情况下是惰性的,并且在需要它们之前不会被激活。尝试在注释中添加immediate = true 以强制激活组件:

@Component(immediate = true)
public class ExampleProviderImpl

更新

以上假设捆绑包已在运行时正确添加、解析和启动。检查是否确实如此

  • 确保捆绑包已正确添加到Run Requirements
  • 确保选中auto-resolve on save 或单击Resolve 按钮
  • 确保解决方案不会导致错误,并将您的捆绑包添加到Run Bundles 部分。
  • 启动环境/部署捆绑包后,转到 Gogo shell 并发出lb 命令。确保您的捆绑包是Active

如果在任何这些步骤中出现问题,请使用所有相关信息更新问题。

【讨论】:

  • 感谢您的建议。但是在我的情况下它仍然不起作用(没有打印)。将新的捆绑包/组件添加到 bndrun 文件的正确方法是什么?我将新组件放在“运行要求”和“运行包”部分中
  • 你能用start.bndrun文件的内容更新你的问题吗?通常您只需将捆绑包添加到Run requirements 中然后解析即可。解析器应更新 Run bundles 部分。
  • @Milen 再次感谢您的帮助。正如您所解释的,我已将新捆绑包添加到“运行要求”部分。选中“保存时自动解析”。当我选择 Resolve 时,我的包会显示在那里,并且还会出现在“Run Bundles”中,所以看起来它可以工作了。但是,我仍然没有打印出任何东西。当我检查 Felix 控制台时,我的包没有出现,就像不存在一样。我也在组件中添加了“(immediate = true)”
  • 该主项目中还有一个 bnd.bnd 文件和 bndrun 文件。捆绑包是否也应该添加到该 bnd.bnd 文件的“运行要求”部分?当我这样做时,它无法解决,出现诸如“找不到满足以下要求的功能:”之类的错误:
  • 没有。通常bnd.bnd 文件中没有“运行要求”。这些是用于配置捆绑包而不是运行时。如何开始运行时?
猜你喜欢
  • 2020-07-27
  • 2015-01-12
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
  • 1970-01-01
  • 2015-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多