【问题标题】:NoClassDefFoundError when starting with Eclipse, but works fine with Ant从 Eclipse 开始时出现 NoClassDefFoundError,但在 Ant 上工作正常
【发布时间】:2014-08-30 09:46:04
【问题描述】:

我正在 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/compile/Ant 不太熟练,我不知道应该为您提供哪些进一步的信息。


清单包含所需的捆绑包。 org.boofcv 包含 ConvertBufferedImage,其中找不到 ByteInterleavedRaster 类。 [已编辑] 当然是占位符。

清单版本:1.0 捆绑清单版本:2 捆绑包名称:[已编辑] Bundle-SymbolicName:[编辑];单例:=true 捆绑版本:1.0.0 要求捆绑:org.apache.activemq, [已编辑], org.boofcv 捆绑激活器:[已编辑] Bundle-ActivationPolicy:懒惰 Bundle-RequiredExecutionEnvironment:JavaSE-1.7 导入包:org.osgi.framework 出口包裹:[已编辑] 捆绑类路径:。

【问题讨论】:

  • 也许像清单文件这样的东西会有所帮助。您是否指定(在清单中)要导入此类?
  • 我添加了清单和信息。
  • @Josch 你可以接受它解决问题的答案,我在你的代码中看到了它;-)

标签: java eclipse ant osgi noclassdeffounderror


【解决方案1】:

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

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

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

如果你搜索后两个环境变量,你会发现很多关于该主题的信息。

【讨论】:

  • 已经设置了以下变量:
    org.osgi.framework.bootdelegation=sun.awt.image
    。那也应该这样做,对吧?
  • 这里有一个很好的描述:spring.io/blog/2009/01/19/exposing-the-boot-classpath-in-osgi。在您的情况下,我会使用 system.packages.extra 。请参阅“哪种解决方案更好?”章节来了解为什么在这种情况下不应该使用引导委托。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多