0

当我尝试使用 ant 构建我的项目时,我得到:“java.lang.NoClassDefFoundError: sun/org/mozilla/javascript/internal/Scriptable”

这源于我对 Rhino 的使用(Oracle JDK 附带的捆绑 java 脚本)

  • 当我用 Eclipse 构建项目时,一切正常。
  • 我使用的 ant 文件是由 eclipse 生成的,除了 java-script 依赖项外,它工作正常。
  • 这些依赖项位于 oracle JDK 附带的 RT.jar 中。
  • 我已经尝试了 jdk6_0_u41 和 jdk7,并且都给出了相同的结果:在 eclipse 中成功,在 ant 中失败。
  • 我尝试在 ubuntu 10 和 12 上构建

我还看到了另外两个对我来说似乎无法接受的建议:

  • 一个线程建议将 RT.jar 复制到项目 lib 目录中。(RT 是整个 java 运行时!)
  • 另一个线程建议我不应该使用:sun/org/mozilla/javascript/internal。但由于我正在进行高级操作(调用对象方法、注册回调等),我认为除了使用 sun.org.mozilla.javascript.internal 系列类之外别无选择。
4

1 回答 1

0

来自 Oracle 网站的评论:

用户不应编写依赖于内部 JDK 实现类的代码。这些类是 JDK 的内部实现细节,如有更改,恕不另行通知。

这不是编译器问题。根据 ct.sym 中提供的信息,javac 行为正确。

问题属于那些决定 ct.sym 应该提供什么(以及应该隐藏什么)的人

您可能会建议将Rhino 的 jar包含到您的项目中,并将其重新指向原始的 Rhino 类,其中不会对用户隐藏“内部”

于 2013-03-05T10:29:56.070 回答