所以我遇到了这个问题。我们使用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文件。
如果您不确定javac
或java
是否在PATH中,请尝试直接指定完整路径(即C:Program FilesJavajdk1.8.0_xxbinjavac
),或者只询问用户它在哪里。
但我不希望大多数最终用户都有PATH设置等等,所以我担心这些解决方案可能会遇到问题。
使用javax.tools
方法(在您链接到的问答中描述)不需要用户设置$PATH
、$JAVA_HOME
或$CLASS_PATH
。AFAIK,它所需要的只是用户从JDK安装中运行java
。
最终使用了Java的Nashorn JS引擎。工作起来很有魅力!脚本更改不需要构建时工作流。