Java 添加Equinox OSGI钩子引发ClassNotFoundException

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文

我试图在我的OSGi容器中添加一个BundleWatcher钩子,这样我就可以在加载捆绑包时监视它们。我在config.ini中做了以下更改

  • 在osgi.bundles属性中添加了对我的jar的引用,如下所示, osgi.bundles=,引用\:文件\:../lib/my。jar@2:开始

  • 设置属性osgi.framework.extensions=mybundle

  • 在osgi.hook.configurators.include中将MyBundleWatcher添加为钩子

  • 此外,我的jar文件与OSGi包位于同一目录中

    当我运行我的应用程序时,我的BundleWatcher会得到一个ClassNotFoundException

    但是,我可以确认我的bundle(包含BundleWatcher)确实是在调用bundle中激活器的start方法时启动的

    我做错了什么

    以下是我跟随的几篇文章作为背景


    为什么要使用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