当我尝试使用ant构建我的项目时,我得到:" . lang。NoClassDefFoundError:太阳/org/mozilla/javascript/internal/Scriptable "
这源于我使用Rhino (Oracle JDK附带的捆绑java脚本)
- 当我用eclipse构建项目时,一切正常。
- 我使用的ant文件是由eclipse生成的,除了java脚本依赖之外,工作得很好。
- 这些依赖项位于oracle JDK附带的RT.jar中。
- 我尝试了jdk6_0_u41和jdk7,两者都给出了相同的结果:eclipse成功,ant失败。
- 我已经尝试在ubuntu 10和12上构建了
我还看到了另外两个我似乎不能接受的建议:
- 一个线程建议将RT.jar复制到项目库目录。(RT是整个java运行时!) 另一个线程建议我不应该使用:sun/org/mozilla/javascript/internal。但是,由于我正在进行高级操作(调用对象方法,注册回调等),我认为除了使用sun.org.mozilla.javascript.internal类家族之外没有其他选择。
来自Oracle网站的评论:
用户不应该编写依赖于内部JDK实现类的代码。这样的类是内部实现的JDK的详细信息,如有更改,不另行通知。
这不是编译器的问题。Javac运行正常到ct.sym中提供的信息
这个问题属于那些决定应该提供什么的人(以及应该隐藏的内容)ct.sym
你可以建议将Rhino的jar包含到你的项目中,并将其重新指向原始的Rhino类,其中'internal '不会对用户隐藏