未发现 MVEL 脚本引擎
MVEL script engine isn't discovered
我的类路径中有一个合适的 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");
returns 空。我检查了工厂的代码,名称mvel
是有效的:
https://github.com/mvel/mvel/blob/master/src/main/java/org/mvel2/jsr223/MvelScriptEngineFactory.java
我的 java 是 java-8-openjdk-amd64
Ubuntu 18.04.2 LTS。
我总是可以手动将 mvel 添加到脚本管理器,但我应该这样做吗?目前只发现了 Nashorn
脚本引擎通过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 的应用程序可能对脚本引擎有特定要求。有些可能需要特定的脚本语言 and/or 版本,而另一些可能需要特定的实施引擎 and/or 版本。脚本引擎以指定的方式打包,以便可以在运行时发现引擎并查询属性。引擎发现机制基于 Jar 文件规范中描述的服务发现机制。实现 类 的脚本引擎打包在包含名为 META-INF/services/javax.script.ScriptEngineFactory 的文本资源的 jar 文件中。此资源必须为打包在 jar 文件中的每个 ScriptEngineFactory 包含一行。 ScriptEngineManager 包括 getEngineFactories 方法来获取使用此机制发现的所有 ScriptEngineFactory 实例。 ScriptEngineFactory 有查询脚本引擎属性的方法。
我的类路径中有一个合适的 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");
returns 空。我检查了工厂的代码,名称mvel
是有效的:
https://github.com/mvel/mvel/blob/master/src/main/java/org/mvel2/jsr223/MvelScriptEngineFactory.java
我的 java 是 java-8-openjdk-amd64
Ubuntu 18.04.2 LTS。
我总是可以手动将 mvel 添加到脚本管理器,但我应该这样做吗?目前只发现了 Nashorn
脚本引擎通过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 的应用程序可能对脚本引擎有特定要求。有些可能需要特定的脚本语言 and/or 版本,而另一些可能需要特定的实施引擎 and/or 版本。脚本引擎以指定的方式打包,以便可以在运行时发现引擎并查询属性。引擎发现机制基于 Jar 文件规范中描述的服务发现机制。实现 类 的脚本引擎打包在包含名为 META-INF/services/javax.script.ScriptEngineFactory 的文本资源的 jar 文件中。此资源必须为打包在 jar 文件中的每个 ScriptEngineFactory 包含一行。 ScriptEngineManager 包括 getEngineFactories 方法来获取使用此机制发现的所有 ScriptEngineFactory 实例。 ScriptEngineFactory 有查询脚本引擎属性的方法。