为了账号安全,请及时绑定邮箱和手机立即绑定

未发现 MVEL 脚本引擎

未发现 MVEL 脚本引擎

红糖糍粑 2022-11-10 16:54:29
我的类路径中有一个合适的 jar,    <dependency>        <groupId>org.mvel</groupId>        <artifactId>mvel2</artifactId>        <version>2.4.4.Final</version>        <type>jar</type>    </dependency>jar 确实包含META-INF/services/javax.script.ScriptEngineFactory文件,该文件说org.mvel2.jsr223.MvelScriptEngineFactory,后一个文件确实看起来像一个脚本引擎工厂。仍然private final ScriptEngineManager _scripting = new ScriptEngineManager(null);....ScriptEngine engine = _scripting.getEngineByName("mvel");返回空值。我检查了工厂的代码,名称mvel是有效的:https://github.com/mvel/mvel/blob/master/src/main/java/org/mvel2/jsr223/MvelScriptEngineFactory.java我的 javajava-8-openjdk-amd64在 Ubuntu 18.04.2 LTS 上。我总是可以手动将 mvel 添加到脚本管理器,但我应该吗?目前仅发现 Nashorn
查看完整描述

1 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

脚本引擎通过 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 的应用程序可能对脚本引擎有特定要求。有些可能需要特定的脚本语言和/或版本,而另一些可能需要特定的实现引擎和/或版本。脚本引擎以指定的方式打包,以便可以在运行时发现引擎并查询属性。Engine 发现机制基于 Jar 文件规范中描述的服务发现机制。脚本引擎实现类打包在 jar 文件中,其中包含名为 META-INF/services/javax.script.ScriptEngineFactory 的文本资源。对于打包在 jar 文件中的每个 ScriptEngineFactory,此资源必须包含一行。ScriptEngineManager 包含 getEngineFactories 方法来获取使用此机制发现的所有 ScriptEngineFactory 实例。ScriptEngineFactory 具有查询脚本引擎属性的方法。


查看完整回答
反对 回复 2022-11-10
  • 1 回答
  • 0 关注
  • 103 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号