首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未发现MVEL脚本引擎

未发现MVEL脚本引擎
EN

Stack Overflow用户
提问于 2019-05-07 06:25:37
回答 1查看 150关注 0票数 0

我的类路径中有一个合适的私有jar,

代码语言:javascript
复制
    <dependency>
        <groupId>org.mvel</groupId>
        <artifactId>mvel2</artifactId>
        <version>2.4.4.Final</version>
        <type>jar</type>
    </dependency>

jar确实包含org.mvel2.jsr223.MvelScriptEngineFactoryMETA-INF/services/javax.script.ScriptEngineFactory文件,后一个文件看起来确实像一个脚本引擎工厂。

仍然

代码语言:javascript
复制
private final ScriptEngineManager _scripting = new ScriptEngineManager(null);
....
ScriptEngine engine = _scripting.getEngineByName("mvel");

返回null。我检查过工厂的代码,名字mvel是合法的:

https://github.com/mvel/mvel/blob/master/src/main/java/org/mvel2/jsr223/MvelScriptEngineFactory.java

我的java是Ubuntu18.04.2LTS上的java-8-openjdk-amd64

我总是可以手动将mvel添加到脚本管理器中,但我应该这样做吗?目前仅发现Nashorn

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-07 23:12:20

脚本引擎是通过包含以下数据的META-INF/services/javax.script.ScriptEngineFactory注册的:

org.mvel2.jsr223.MvelScriptEngineFactory

首先,确保您实际打包的JAR包含此文件和文本。注意,将文件打包到一个大的jar文件中可能会导致该文件被覆盖或忽略--如果这样做,则该文件必须包含应用程序要引用的所有脚本引擎。找不到此文件也可能是类加载器管理不善造成的。

来自甲骨文:https://docs.oracle.com/javase/8/docs/api/javax/script/compact2-package-summary.html

脚本引擎发现和元数据:编写到脚本API的应用程序可能对脚本引擎有特定要求。一些可能需要特定的脚本语言和/或版本,而其他可能需要特定的实现引擎和/或版本。脚本引擎以指定的方式打包,以便可以在运行时发现引擎并查询属性。引擎发现机制基于Jar文件规范中描述的服务发现机制。脚本引擎实现类打包在jar文件中,其中包含名为META-INF/services/javax.script.ScriptEngineFactory.的文本资源对于jar文件中打包的每个ScriptEngineFactory,此资源必须包含一行。ScriptEngineManager包含getEngineFactories方法,用于获取使用此机制发现的所有ScriptEngineFactory实例。ScriptEngineFactory提供了查询脚本引擎属性的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56013139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档