Eclipse plugin OSGi-获取java.lang.NoClassDefFoundError:org/omg/CORBA/Object

Eclipse plugin OSGi-获取java.lang.NoClassDefFoundError:org/omg/CORBA/Object,eclipse-plugin,osgi,equinox,osgi-bundle,redhawksdr,Eclipse Plugin,Osgi,Equinox,Osgi Bundle,Redhawksdr,我正在运行一个示例JAVA Swing类,该类通过CORBA(jacorb)访问REDHAWK后端。示例是一个OSGi应用程序。在Eclipse内部,我使用OSGiFramework运行配置运行项目。应用程序按预期工作,与REDHAWK后端通信并弹出JavaSwingUI。我使用Eclipse创建的config.ini和dev.properties文件在Eclipse外部运行应用程序。下面显示的命令行参数导致以下错误。我从控制台检查jacorb捆绑包是否已安装并处于活动状态 /usr/lib/j

我正在运行一个示例JAVA Swing类,该类通过CORBA(jacorb)访问REDHAWK后端。示例是一个OSGi应用程序。在Eclipse内部,我使用OSGiFramework运行配置运行项目。应用程序按预期工作,与REDHAWK后端通信并弹出JavaSwingUI。我使用Eclipse创建的config.ini和dev.properties文件在Eclipse外部运行应用程序。下面显示的命令行参数导致以下错误。我从控制台检查jacorb捆绑包是否已安装并处于活动状态

/usr/lib/jvm/java-1.7.0-openjdk/bin/java -jar ./org.eclipse.osgi_3.8.2.v20130124-134944.jar  -dev file:dev.properties -os linux -ws gtk -arch x86 -application com.viper.swing.application -consoleLog -console

java.version=1.7.0_51
java.vendor=Oracle Corporation
BootLoader constants: OS=linux, ARCH=x86, WS=gtk, NL=en_US
Framework arguments:  -application com.viper.swing.application
Command-line arguments:  -dev file:dev.properties -os linux -ws gtk -arch x86 -application com.viper.swing.application -consoleLog -console

!ENTRY org.eclipse.osgi 4 0 2014-03-21 10:38:58.446
!MESSAGE Application error
!STACK 1
java.lang.NoClassDefFoundError: org/omg/CORBA/Object
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)
at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClassHoldingLock(ClasspathManager.java:632)
at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:607)
at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:568)
at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:492)
at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:465)
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395)

...

    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
at org.eclipse.core.runtime.adaptor.EclipseStarter.main(EclipseStarter.java:151)
原因:java.lang.ClassNotFoundException:org.omg.CORBA.Object 位于org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501) 位于org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421) 位于org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412) 位于org.eclipse.osgi.internal.baseAdapter.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 75更多

向Manifest.MF添加导入包声明

 Import-Package: org.omg.CORBA

在标准OSGi环境中,OSGi框架只会自动将java.*包导入包中。所有其他包都需要通过清单中的
Import-Package
语句显式导入

特别是众所周知的eclipse/equinox将JRE通常附带的类的类解析委托给调试/运行环境中的标准VM类加载器。这意味着,如果您在eclipse环境之外运行捆绑包,您会收到关于缺少导入或某些类未找到异常的投诉

解决方案是要么纠正导入,要么调整外部环境,使其表现得像在eclipse中运行一样。后者可以通过在配置(即configuration/config.ini)中添加以下行来完成:


不幸的是,这对我不起作用。当我在Eclipse中使用OSGi框架运行配置运行它时,它可以正常工作。如果舱单不正确,我想它在那里不会起作用。
org.osgi.framework.bootdelegation=*