使用自定义ScriptEngine时,Java ScriptEngineManager返回null

时间:2015-03-30 15:54:14

标签: java scripting scriptengine

我之前在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");,但这些都没有奏效。

我的设置不正确吗?

1 个答案:

答案 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现在应该注册,您应该能够按名称查找它。