【发布时间】: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