【发布时间】:2011-07-26 00:46:27
【问题描述】:
我正在使用嵌入在 Java 项目中的 Jython 脚本,该脚本是在安装了 Pydev 的 Eclipse 中开发的。现在我想在另一个纯 Python 项目中重用这个脚本。有没有办法在不复制脚本的情况下干净地做到这一点?
目前,我有一个 Java 项目,其中包含目录 src/(包含 Java 源代码)和 src-py/(包含 Jython 源代码)并添加了 Pydev 'facet'。 Java 代码调用 Jython 代码,如下所示:
// evaluate the Jython class
PythonInterpreter interpreter = new PythonInterpreter();
InputStream resourceAsStream = MyEclipsePlugin.getResource("/src-py/MyJythonCode.py");
interpreter.execfile(resourceAsStream);
// create an instance of the Jython class and retrieve a Java interface reference to it
interpreter.exec("x = MyJythonClass()"); // MyJythonClass implements MyJavaInterface
Object x = interpreter.get("x").__tojava__(MyJavaInterface.class);
return (MyJavaInterface) x;
这行得通,但它显然很丑陋。根据我的阅读,曾经有一个“jythonc”——它可能更接近我的需要——但它似乎已被弃用,并且不鼓励你使用它。没有它,我需要在运行时将实际的 Jython 源代码编译成 JVM 类。因此,上面的模式,不幸的是似乎不支持加载模块,所以我目前正在处理单个 .py 文件中的所有内容。我想我最终可能会多次执行interpreter.execfile(),但是当模块之间存在相互依赖关系时,我还没有真正弄清楚如何做到这一点。
接下来,我尝试创建一个新的 Jython 项目来将我的 MyJythonCode.py 移动到其中。不幸的是,我无法将 Pydev/Jython 项目添加为对 Java 项目的项目引用,因此我不确定如何将其集成到 Java 项目中。
目前看到的选项,我都不喜欢:
- 复制 MyJythonCode.py 并同时修改它们。
- 做一些时髦的 svn:externals 东西,在每次更新时为我做复制。
- 尝试为 Eclipse 找到一个预构建/自定义构建步骤插件来进行复制。
有人有更好的主意吗?
【问题讨论】:
-
您的 IDE 和 VCS 可以处理符号链接吗?
-
@Thomas 那将是提到的 svn:externals 解决方案。在新的开发人员机器上设置项目时,每个基于 IDE 或 OS 的解决方案都意味着额外的步骤,我真的很想避免。
标签: python eclipse jython pydev