【问题标题】:Problems generating ant scripts for java when linking to Rhino链接到 Rhino 时为 java 生成 ant 脚本的问题
【发布时间】:2013-03-04 12:40:14
【问题描述】:

当我尝试使用 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 系列类之外别无选择。

【问题讨论】:

  • Ant 是否使用相同的构建类路径?考虑使用您自己的 Rhino 实现。 Java 让no guarantees 了解不同版本/实现的脚本引擎。
  • Ant 文件是由 eclipse 生成的,所以我假设它使用相同的类路径。除此之外,我在构建机器上只安装了一个 jdk(我竭尽全力确保没有安装 openJDK)。因此,在没有 JDK 提供的 RT.jar 的情况下,java 编译器链接是否可能?

标签: java eclipse ant build rhino


【解决方案1】:

来自 Oracle 网站的评论:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多