Java MVEL脚本引擎不是';t发现

Java MVEL脚本引擎不是';t发现,java,jsr223,mvel,Java,Jsr223,Mvel,我的类路径中有一个私有jar <dependency> <groupId>org.mvel</groupId> <artifactId>mvel2</artifactId> <version>2.4.4.Final</version> <type>jar</type> </dependency>

我的类路径中有一个私有jar

    <dependency>
        <groupId>org.mvel</groupId>
        <artifactId>mvel2</artifactId>
        <version>2.4.4.Final</version>
        <type>jar</type>
    </dependency>
返回null。我检查了工厂代码,名称
mvel
有效:

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


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

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

org.mvel2.jsr223.MvelScriptEngineFactory

首先,确保您实际上正在打包一个包含此文件和文本的JAR。注意,在单个大jar文件中打包可能会导致该文件被覆盖或忽略——如果这样做,该文件必须包含应用程序引用的所有脚本引擎。找不到此文件也可能是classloader管理不当的结果

来自Oracle:

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

private final ScriptEngineManager _scripting = new ScriptEngineManager(null);
....
ScriptEngine engine = _scripting.getEngineByName("mvel");