gpt4 book ai didi

java - Jython 按 `getEngineFactories` 列出,但 `getEngineByName("jython")` is ` null`

转载 作者:行者123 更新时间:2023-11-30 05:57:59 26 4
gpt4 key购买 nike

我创建了一个默认的 Maven Java 项目并添加了以下依赖项:

<dependency>
<groupId>org.python</groupId>
<artifactId>jython</artifactId>
<version>2.7.0</version>
</dependency>

然后我创建了一个包src/main/java/mypkg并添加了此类:

package mypkg;

import javax.script.*;

class JythonMinimalTest {
public static void main(String[] args) throws Exception {
String engineName = "python";
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName(engineName);
if (engine == null) {
System.err.println("ERROR: `" + engineName + "` not available.");
System.err.println("Available engines: ");
for (ScriptEngineFactory factory: manager.getEngineFactories()) {
System.err.println(factory);
System.err.println("names:");
for (String name: factory.getNames()) {
System.err.println(" " + name);
}
}
System.exit(999);
}
engine.eval("print('hello, world')");
}
}

当我使用 exec:java 运行它时,

mvn exec:java -Dexec.mainClass=mypkg.JythonMinimalTest

我得到以下神秘的输出:

ERROR: `python` not available.
Available engines:
org.python.jsr223.PyScriptEngineFactory@2b0e6c89
names:
python
jython
jdk.nashorn.api.scripting.NashornScriptEngineFactory@46618cb8
names:
nashorn
Nashorn
js
JS
JavaScript
javascript
ECMAScript
ecmascript

管理器返回 null,但随后在下一行中列出可用脚本引擎中的 python/jython

Nashorn 以完全相同的方式工作得很好。我对 Jython 做错了什么?

最佳答案

这是一种解决方法:

将其添加到顶部:

import org.python.core.Options;

在调用getEngineByName之前,设置

   Options.importSite = false;

然后引擎就创建成功了。

this conversation 得到解决方案.

<小时/>

另一个效果很好的解决方案(由 mzjn 在评论中提出)是用 jython-standalone 替换 jython 工件。

关于java - Jython 按 `getEngineFactories` 列出,但 `getEngineByName("jython")` is ` null`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52825426/

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