从Eclipse开始时NoClassDefFoundError,但与Ant一起正常工作

时间:2014-07-09 11:26:57

标签: java eclipse ant osgi noclassdeffounderror

我正在Eclipse中开发一个OSGi组件(Linux上的Oracle JVM 1.8)。 当我通过带有所有必需包的Eclipse Runconfiguration运行组件时,出现以下错误:

ErrorMessage: java.lang.NoClassDefFoundError: sun/awt/image/ByteInterleavedRaster

我的组件导入已编译的boofcv.core.image.ConvertBufferedImage类,该类使用sun.awt.image.ByteInterleavedRaster类。当我检查rt.jar包时,它会列出ByteInterleavedRaster类。

当使用ant部署组件时,一切都运行良好。

由于我不熟悉Java CLASSPATH /编译/ Ant,我不知道我应该为您提供哪些进一步的信息。


清单包含必需的包。 org.boofcv包含ConvertBufferedImage,它找不到ByteInterleavedRaster类。 [编辑]当然是占位符。

    Manifest-Version: 1.0
    Bundle-ManifestVersion: 2
    Bundle-Name: [redacted]
    Bundle-SymbolicName: [redacted];singleton:=true
    Bundle-Version: 1.0.0
    Require-Bundle: org.apache.activemq,
      [redacted],
      org.boofcv
    Bundle-Activator: [redacted]
    Bundle-ActivationPolicy: lazy
    Bundle-RequiredExecutionEnvironment: JavaSE-1.7
    Import-Package: org.osgi.framework
    Export-Package: [redacted]
    Bundle-ClassPath: .

1 个答案:

答案 0 :(得分:3)

默认情况下,sun。*包不适用于OSGi容器中的包。原因是它们不是标准Java API的一部分。它们可能在其他实现中不可用(如IBM JDK)

您可以通过多种方式指定JDK包的可用性:

  • 创建自定义java配置文件(搜索osgi.java.profile)
  • 使用org.osgi.framework.system.packages
  • 指定包列表
  • 使用org.osgi.framework.system.packages.extra环境变量指定其他包

如果搜索后两个环境变量,您将找到有关该主题的大量信息。