And*_*kin 2 python java jython jsr223
我创建了一个默认的 Maven Java 项目并添加了以下依赖项:
<dependency>
<groupId>org.python</groupId>
<artifactId>jython</artifactId>
<version>2.7.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个包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')");
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用运行它时exec:java,
mvn exec:java -Dexec.mainClass=mypkg.JythonMinimalTest
Run Code Online (Sandbox Code Playgroud)
我得到以下神秘的输出:
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
Run Code Online (Sandbox Code Playgroud)
管理器返回null,但随后在下一行列出python/jython可用的脚本引擎。
Nashorn 以完全相同的方式工作得很好。我对 Jython 做错了什么?
这是一种解决方法:
在顶部添加此内容:
import org.python.core.Options;
Run Code Online (Sandbox Code Playgroud)
调用前getEngineByName,设置
Options.importSite = false;
Run Code Online (Sandbox Code Playgroud)
然后引擎就创建成功了。
从这次谈话中得到了解决方案。
另一个效果很好的解决方案(由 mzjn 在评论中提出)是将jython工件替换为jython-standalone.
| 归档时间: |
|
| 查看次数: |
2219 次 |
| 最近记录: |