所以我遇到了这个问题。我们使用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文件。这是我以前从未做过的事情,所以我对如何以对最终用户安全的方式进行处理有点不知所措。
我发现了这种方法: Generating, compiling and using Java code at run time?
但我不希望大多数最终用户拥有PATH设置和所有这些,所以我担心这些解决方案可能会遇到问题。这里的理想方法是什么?
答案 0 :(得分:0)
使用Runtime.getRuntime().exec("javac SomeFile.java")
通过命令行编译Java文件。
如果你不确定javac
或java
是否在PATH中,请尝试直接指定完整路径(即C:\Program Files\Java\jdk1.8.0_xx\bin\javac
)或只是询问用户它在哪里
答案 1 :(得分:0)
但我不希望大多数最终用户拥有PATH设置和所有这些,所以我担心这些解决方案可能会遇到问题。
使用javax.tools
方法(在您链接到的Q& A中描述)不需要用户设置$PATH
或$JAVA_HOME
或$CLASS_PATH
。 AFAIK,它只需要用户从JDK安装运行java
。
答案 2 :(得分:0)
使用适用于Java的Nashorn JS引擎。像魅力一样工作!脚本更改不需要构建时工作流。