在Eclipse插件中使用Jython
我在用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 个回答
最后我搞明白这个问题了。以下是我所做的步骤:
1) 我使用了JSR223脚本引擎,而不是Python解释器:
engine.get(module_name); //获取模块的类对象
getConstructors[0].newInstance(null) 用于创建一个对象
//将其转换为你的接口类型!
2) 确保你的Eclipse插件没有打包成jar文件(在3.5版本中设置Eclipse-BundleShape: dir)
3) 在清单文件中,将jython.jar和你想要放置模块的任何路径添加到运行时类路径中。
希望这能帮助到某个人。