Java NoClassDefFoundError在开始使用Eclipse时出错,但在使用Ant时可以正常工作

Java NoClassDefFoundError在开始使用Eclipse时出错,但在使用Ant时可以正常工作,java,eclipse,ant,osgi,noclassdeffounderror,Java,Eclipse,Ant,Osgi,Noclassdeffounderror,我正在Eclipse中开发一个OSGi组件(linux上的Oracle JVM 1.8)。 当我使用所有必需的捆绑包通过Eclipse Runconfiguration运行组件时,出现以下错误: ErrorMessage: java.lang.NoClassDefFoundError: sun/awt/image/ByteInterleavedRaster ErrorMessage:java.lang.NoClassDefFoundError:sun/awt/image/ByteInterlea

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

ErrorMessage: java.lang.NoClassDefFoundError: sun/awt/image/ByteInterleavedRaster ErrorMessage:java.lang.NoClassDefFoundError:sun/awt/image/ByteInterleavedRaster 我的组件导入已编译的boofcv.core.image.ConvertBuffereImage类,该类使用sun.awt.image.ByteInterleavedRaster类。当我检查rt.jar包时,它列出了ByteInterleavedRaster类

当使用ant部署组件时,一切都非常正常

由于我对Java类路径/编译/Ant不太熟练,我不知道应该为您提供哪些进一步的信息


清单包含所需的捆绑包。 org.boofcv包含ConvertBuffereImage,它找不到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 软件包版本:2 捆绑包名称:[已编辑] Bundle SymbolicName:[已编辑];单例:=true 捆绑包版本:1.0.0 需要捆绑包:org.apache.activemq, [修订], org.boofcv 束激活器:[已编辑] 捆绑包激活策略:惰性 Bundle-RequiredExecutionEnvironment:JavaSE-1.7 导入包:org.osgi.framework 出口包装:[修订] 包类路径:。
默认情况下,sun.*包不可用于OSGi容器中的捆绑包。原因是它们不是标准JavaAPI的一部分。它们可能在其他实现中不可用(如IBM JDK)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

可能类似清单文件的内容会有所帮助。您(在清单中)指定要导入此类了吗?我添加了清单和信息。@Josch您可以接受答案它解决了问题,我在您的代码中看到了;-)也许像清单文件这样的东西会有帮助。您(在清单中)指定要导入此类了吗?我添加了清单和信息。@Josch您可以接受答案它解决了问题,我在您的代码中看到了;-)也许像清单文件这样的东西会有帮助。您(在清单中)指定要导入此类了吗?我添加了清单和信息。@Josch您可以接受答案它解决了问题,我在您的代码中看到了;-)也许像清单文件这样的东西会有帮助。您(在清单中)指定要导入此类了吗?我添加了清单和信息。@Josch您可以接受答案它解决了问题,我在您的代码中看到了;-)已设置以下变量:org.osgi.framework.bootdegration=sun.awt.image。这应该也是一样的,对吧?这里有一个很好的描述:。我会在你的情况下使用system.packages.extra。请参阅“哪个解决方案更好?”一章,了解为什么在这种情况下不应使用引导委派。已经设置了以下变量:org.osgi.framework.bootdreaction=sun.awt.image。这应该也是一样的,对吧?这里有一个很好的描述:。我会在你的情况下使用system.packages.extra。请参阅“哪个解决方案更好?”一章,了解为什么在这种情况下不应使用引导委派。已经设置了以下变量:org.osgi.framework.bootdreaction=sun.awt.image。这应该也是一样的,对吧?这里有一个很好的描述:。我会在你的情况下使用system.packages.extra。请参阅“哪种解决方案?”