近期,整合tomcat和osgi。参照了dinstone《扩展Tomcat支持OSGi应用服务》。
因为牵扯到从外部启动equinox,所以使用EclipseStarter这个类。很自然的将这个类对应的jar包(org.elipse.osgi)放到了java工程下自建的lib文件夹下。之后build path。导出工程。放置在tomcat的lib文件夹下。并在conf/server.xml文件中配置了Listener标签。
在tomcat启动时抛出java.lang.NoClassDefFoundError org/eclipse/osgi/framework/internal/core/FrameworkProperties。
从外部看,就是tomcat下lib文件夹下jar包引用其他类,找不见引用类的错误。大概是类加载的问题。
怎样来解决这个问题呢?如果能指出出错的原因就更好了。

解决方案 »

  1.   

    解析launch.ini时候,在EclipseStarter启动时设置到org.eclipse.osgi.framework.internal.core.FrameworkProperties中,所以楼主的错误是FrameworkProperties这个类找不到。建议重新下一个osgi的jar包,调试
      

  2.   

    org.eclipse.osgi是myeclipse 10 common/plugins 中自带的(插件形式)。考虑到类加载的问题,改变如下:将org.eclipse.osgi.jar,org.apache.felix.main.jar拷贝到tomcat的 lib目录下,将自建java工程的lib目录清空。并修改build path指向tomcat/lib 下的所需jar包。于是,错误转换为:
    java.lang.SecurityException:class "org.osgi.framework.BundleReference"'s singer information does not match signer information of other classes in the same package。