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

时间:2014-03-21 19:00:37

标签: eclipse-plugin osgi equinox osgi-bundle redhawksdr

我正在运行一个示例JAVA Swing类,它通过CORBA(jacorb)访问REDHAWK后端。该示例是OSGi应用程序。在Eclipse内部,我使用OSGiFramework运行配置运行项目。应用程序按预期工作,与REDHAWK后端通信并弹出Java Swing UI。我使用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.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)     at java.lang.ClassLoader.loadClass(ClassLoader.java:358)     ......还有75个

2 个答案:

答案 0 :(得分:1)

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

特别是eclipse / equinox已知将通常随JRE一起提供的类的类解析委托给其调试/运行环境中的标准VM类加载器。这意味着如果你在eclipse环境之外运行bundle,就会得到有关缺少导入或某些类未找到异常的投诉。

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

org.osgi.framework.bootdelegation=*

答案 1 :(得分:0)

向您的Manifest.MF添加Import-Package语句

 Import-Package: org.omg.CORBA