我之前在StackExchange上询问过this question。因为它被搁置,我跟随评论并询问如何解决这个问题。为了避免重复自己并复制粘贴说明,请阅读上一个我要求提供详细信息的问题。
我正在尝试编写自己的自定义ScriptEngine for Java。我尝试扩展AbstractScriptEngine
并实现ScriptEngineFactory
并填写所有最基本的必需方法,以测试我是否能够至少开始使用脚本。 (参见代码HERE)当我运行以下代码时......
public static void main(String[] args) {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByExtension("sbs"); // <- THIS LINE HERE
System.out.println(engine);
try {
System.out.println(engine.eval("STRING!"));
} catch (ScriptException e) {
e.printStackTrace();
}
manager.getEngineByExtension("sbs");
方法返回null。我也尝试使用getEngineByMimeType("text/SandboxScript");
以及getEngineByName("SandboxScript");
,但这些都没有奏效。
我的设置不正确吗?
答案 0 :(得分:0)
自定义脚本引擎的查找是通过服务提供程序机制(请参阅http://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html#Service%20Provider),因此必须将其设置为能够按名称查找您的类。在项目的META-INF目录中,创建名为&#39; services&#39;的文件夹。如果一个不存在。在此文件夹中,创建一个名为&#39; javax.script.ServiceEngineFactory&#39;的文件。包含您的包/类的行
me.gamefreak0.ss.SandboxServiceEngineFactory
假设您的项目和META-INF设置正确,您的ScriptEngine现在应该注册,您应该能够按名称查找它。