gpt4 book ai didi

java - 以编程方式启动 OSGi 文件夹包

转载 作者:行者123 更新时间:2023-12-01 11:38:59 25 4
gpt4 key购买 nike

我已经在 Eclipse 中创建了一个 OSGi Bundle 项目,并且我想从另一个 Java 项目以编程方式启动它。

这就是我正在尝试做的事情:

FrameworkFactory frameworkFactory = ServiceLoader.load(FrameworkFactory.class).iterator().next();
Map<String,String> config = new HashMap<String,String>();
Framework framework = frameworkFactory.newFramework(config);
framework.start();
BundleContext context = framework.getBundleContext();
Bundle bundle = context.installBundle("file:./test.ServiceA");
bundle.start();

但我有这个错误

Exception in thread "main" org.osgi.framework.BundleException: Error loading bundle activator.
...
Caused by: java.lang.ClassNotFoundException: test.servicea.Activator cannot be found by test.ServiceA_1.0.0.qualifier

如果我安装插件 jar 而不是指向文件夹,一切都会正常

Bundle bundle = context.installBundle("file:./tmp/test.ServiceA_1.0.0.201504172035.jar");       

但我想直接调试 Eclipse 项目文件夹。

有人可以帮助我吗?

最佳答案

将“reference:”放在 URL 的开头。通过这样做

  • bundle 的内容不会复制到 OSGi 容器的工作(或缓存)文件夹,但将从其原始位置使用
  • 文件夹可以作为 OSGi bundle 安装

这不是规范的一部分,但适用于 Equinox 和 Felix(也可能适用于 Knopflerfish)

根据您的示例:

Bundle bundle = context.installBundle("reference:file:./test.ServiceA");

根据评论进行编辑

由于 MANIFEST.MF 文件位于 ./test.ServiceA 中,但已编译的类位于 ./test.serviceA/bin 下,因此 “Bundle -Classpath: bin" 必须临时提供 MANIFEST header ,直到从文件夹安装 bundle 为止。在发布之前,必须删除 header ,因为类将位于生成的 JAR 的根目录中。

关于java - 以编程方式启动 OSGi 文件夹包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29707758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com