无法执行使用Rhino JavaScript编译器编译的JavaScript文件

好的,所以我创建了一个名为HelloWorld.js的JavaScript文件,其中包含以下内容:

java.lang.System.out.println("Hello World!");

现在,我使用以下命令使用Rhino JavaScript编译器编译它(js.jar文件在我的类路径中):

java org.mozilla.javascript.tools.jsc.Main HelloWorld.js

它编译了JavaScript文件并按预期创建了Java类文件.然后我尝试通过调用java HelloWorld来执行Java类文件.但是,它生成以下错误消息:

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld
Caused by: java.lang.ClassNotFoundException: HelloWorld
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: HelloWorld. Program will exit.

我试图理解是什么导致抛出java.lang.NoClassDefFoundError,从我在blog post中读到的内容中我了解到,如果在编译期间存在类但在Java类路径中不可用,则抛出java.lang.NoClassDefFoundError.运行.

所以我运行了javap HelloWorld命令来检查问题是什么,这就是我得到的:

public class HelloWorld extends org.mozilla.javascript.NativeFunction implements org.mozilla.javascript.Script {
    public HelloWorld();
    public static void main(java.lang.String[]);
    public final java.lang.Object exec(org.mozilla.javascript.Context, org.mozilla.javascript.Scriptable);
    public final java.lang.Object call(org.mozilla.javascript.Context, org.mozilla.javascript.Scriptable, org.mozilla.javascript.Scriptable, java.lang.Object[]);
    public int getLanguageVersion();
    public java.lang.String getFunctionName();
    public int getParamCount();
    public int getParamAndVarCount();
    public java.lang.String getParamOrVarName(int);
    public boolean getParamOrVarConst(int);
}

现在,我从中理解的是HelloWorld类存在并被声明为public.因此,Java虚拟机无法找到它的任何原因.这是我很困惑的地方.我不知道从这里去哪里,也不知道如何解决这个问题.

我发现如果我调用Rhino来调用HelloWorld实例上的exec方法,我可以执行Java类文件,如下所示:

java -jar /usr/share/rhino/js.jar HelloWorld.class

但是,我想直接使用java HelloWorld命令执行Java类文件,因为js.jar文件已经在我的类路径中.我想了解问题是什么,以便我知道幕后真的发生了什么.

解决方法:

你确定类文件在类路径(以及js.jar)上吗?

尝试

java -cp .;js.jar HelloWorld

(假设当前目录中有HelloWorld.class,否则类似于-cp build; js.jar).

上一篇:java – NoClassDefFoundError:org / apache / hadoop / conf / Configuration


下一篇:java.lang.NoClassDefFoundError:org / springframework / transaction / interceptor / TransactionInterc