在运行时编译/运行.java文件与反射



所以我遇到了这个问题。我们使用Java作为我们的"脚本"语言,因为我们已经将它用于其他一切,而且它不需要任何额外的第三方库。

现在,我们正在通过反射执行运行时代码。类似于:

Class triggerAction = null;
    try {
        triggerAction = Class.forName(actionName);
        Gdx.app.log("Info", triggerAction.getName() + " attached to "
                + this.toString());
        try {
            this.triggerAction = (TriggerAction) triggerAction
                    .newInstance();
        } 

这很好,但并不理想。任何要在运行时运行的java文件都必须编译到最新版本中。理想情况下,非开发人员可以使用存储在"/scripts/"目录中的脚本文件,然后运行程序并执行修改后的.java文件。这是我以前从未做过的事情,所以我有点不知所措,不知道如何以对最终用户安全的方式进行。

我发现了这种方法:在运行时生成、编译和使用Java代码?

但我不希望大多数最终用户都有PATH设置等等,所以我担心这些解决方案可能会遇到问题。这里的理想方法是什么?

使用Runtime.getRuntime().exec("javac SomeFile.java")通过命令行编译Java文件。

如果您不确定javacjava是否在PATH中,请尝试直接指定完整路径(即C:Program FilesJavajdk1.8.0_xxbinjavac),或者只询问用户它在哪里。

但我不希望大多数最终用户都有PATH设置等等,所以我担心这些解决方案可能会遇到问题。

使用javax.tools方法(在您链接到的问答中描述)不需要用户设置$PATH$JAVA_HOME$CLASS_PATH。AFAIK,它所需要的只是用户从JDK安装中运行java

最终使用了Java的Nashorn JS引擎。工作起来很有魅力!脚本更改不需要构建时工作流。

相关内容

  • 没有找到相关文章

最新更新