Java 添加Equinox OSGI钩子引发ClassNotFoundException
我试图在我的OSGi容器中添加一个BundleWatcher钩子,这样我就可以在加载捆绑包时监视它们。我在config.ini中做了以下更改Java 添加Equinox OSGI钩子引发ClassNotFoundException,java,eclipse,osgi,equinox,Java,Eclipse,Osgi,Equinox,我试图在我的OSGi容器中添加一个BundleWatcher钩子,这样我就可以在加载捆绑包时监视它们。我在config.ini中做了以下更改 在osgi.bundles属性中添加了对我的jar的引用,如下所示, osgi.bundles=,引用\:文件\:../lib/my。jar@2:开始 设置属性osgi.framework.extensions=mybundle 在osgi.hook.configurators.include中将MyBundleWatcher添加为钩子 此外,我的jar文
为什么要使用Equinox专用的
捆绑式记录器
——它需要特别访问Equinox内部和配置——而不是OSGi标准的捆绑式记录器
,它可以通过任何捆绑包实现,并且可以用于任何框架实现?您似乎在想方设法让它变得复杂。您将其作为一个扩展(如设备驱动程序)并使用专有代码。如果您想查看已安装的所有捆绑包,可能有一些理由,但在重新启动时,您不会看到已安装捆绑包的安装事件。因此,如果您可以只看到所有的捆绑包都是活动的,那么到目前为止,跟踪安装了哪些捆绑包的最简单解决方案是:
package tracker;
public class Watch implements BundleActivator {
BundleTracker<Bundle> tracker;
public void start(BundleContext context) {
tracker = new BundleTracker<Bundle>( context, -1, null ) {
public Bundle addingBundle( Bundle b, BundleEvent e) {
System.out.println("Tracking bundle " + b.getSymbolicName());
return b;
}
};
tracker.open();
}
public void stop(BundleContext context) {}
}
我想在我的情况下,我可以使用一些特定于春分的东西。我的目标是首先启动我的插件,这样我就可以监控其余插件的加载。BundleTracker似乎无法做到这一点BundleWatcher可以做到。事实并非如此。BundleTracker会被告知其感兴趣的所有捆绑包的状态,包括在其之前启动的捆绑包和在其之后启动的捆绑包。使用Equinox特定的BundleWatcher没有任何好处。我真的希望能够监控每个捆绑包的加载。然后您需要控制OSGi启动器。在框架启动之前安装BundleListener或BundleTracker。正如Peter所说,您仍然无法获得上次运行框架时安装的捆绑包的安装事件。也许如果你给了你想要这个的动机——而不仅仅是坚持你想要它——那么你就能找到一个好的解决方案。你一定有一个非常重要的理由去经历这个复杂的过程。你能解释一下为什么你需要看到事情发生时的样子吗(这通常是一个骗局)?
Bundle-Activator: tracker.Watch