gpt4 book ai didi

java - 未发现 MVEL 脚本引擎

转载 作者:行者123 更新时间:2023-12-02 09:56:01 24 4
gpt4 key购买 nike

我的类路径中有一个 approprivate 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

我的 java 是 Ubuntu 18.04.2 LTS 上的 java-8-openjdk-amd64

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

关于java - 未发现 MVEL 脚本引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56013139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com