在Eclipse插件中使用Jython

3 投票
1 回答
2370 浏览
提问于 2025-04-15 16:11

我在用Eclipse插件运行jython的时候遇到了不少麻烦。我有一个简单的对象工厂,它可以加载一个符合Java接口的Python模块。在独立模式下,这一切都运行得很好。但是,当我把它打包成Eclipse插件时,出现了不同的错误,具体情况如下:

我的Java包是com.foo。

1) 如果我不修改任何路径,就会出现:“没有名为foo的模块”。

2) 如果我通过以下方式将我的Java jar包添加到sys.path中:

PythonInterpreter interp = new PythonInterpreter(null, new PySystemState());
PySystemState sys = Py.getSystemState();
sys.path.append(new PyString("myjar..."));

我会得到:

a) 我的Python模块的构造函数被调用了(构造函数中的打印信息显示出来)
b) 从调用tojava返回了一个PySingleton,名字字段是“Error”。

3) 这时,我尝试让Eclipse中的类路径和独立模式下完全一样,所以在调用Python解释器之前,我把我的jar包添加到了运行时的类路径中。

结果我收到了我最喜欢的错误信息:SystemError: 自动代理初始化只应该发生在代理类上。

这个问题让我很抓狂。我对在独立模式下能这么快搞定这件事感到很惊讶。难道在Eclipse下运行会有这么大的不同吗?我认为这应该只是类路径的问题,但到目前为止,似乎并不是这样。

1 个回答

5

最后我搞明白这个问题了。以下是我所做的步骤:

1) 我使用了JSR223脚本引擎,而不是Python解释器:

engine.get(module_name); //获取模块的类对象 getConstructors[0].newInstance(null) 用于创建一个对象
//将其转换为你的接口类型!

2) 确保你的Eclipse插件没有打包成jar文件(在3.5版本中设置Eclipse-BundleShape: dir)

3) 在清单文件中,将jython.jar和你想要放置模块的任何路径添加到运行时类路径中。

希望这能帮助到某个人。

撰写回答