使用pydev从jython生成.class文件

3 投票
2 回答
3894 浏览
提问于 2025-04-15 12:38

我第一次尝试使用jython,这是一个我在eclipse中用pydev写的java/jython项目。

我先创建了一个java项目,然后通过右键点击项目,选择pydev,再选择设置为...来把它变成pydev项目。接着我添加了两个源文件夹,一个用于java,一个用于jython,每个源文件夹都有一个包。我还把每个文件夹设置为项目的构建路径。我告诉你这些,是希望你能告诉我我是否正确设置了这个项目。

但真正的问题是:我怎么才能把我的jython代码变成一个类文件,以便java代码可以使用它呢? 我希望eclipse/pydev能自动帮我完成这个,但我找不到方法。jython用户指南中提到过这可能是可行的,但我在其他地方找不到相关信息。

编辑:我确实在这里这里找到了一些信息,但进展并不顺利。

我一直在仔细跟随第二个链接中的指南,但我还是搞不清楚怎么让jythonc为我的python类生成一个构造函数。

2 个回答

0

根据“在不使用 jythonc 的情况下从 Java 访问 Jython”的教程,现在可以在 Java 代码中使用 jython 模块了。唯一需要注意的是,*.py 模块不会被编译成 *.class 文件。这意味着在 Java 中使用的其实是一些特别的脚本。性能方面,可能会比用 jythonc 编译过的 Python 模块要差,但根据 Jython 社区的消息,他们不打算继续支持 jythonc(实际上在 jython2.5.1 中已经停止支持了)。

所以如果你决定采用不使用 jythonc 的方法,上面的教程是非常合适的。我需要稍微修改一下 JythonFactory.java 的代码:

String objectDef = "=" + javaClassName + "(your_constructor_params here)";
try {
       Class JavaInterface = Class.forName(interfaceName);

       System.out.println("JavaInterface=" + JavaInterface);

       javaInt = 
            interpreter.get("instance name of a jython class from jython main function").__tojava__(JavaInterface);
    } catch (ClassNotFoundException ex) {
        ex.printStackTrace();  // Add logging here
    }
5

Jythonc这个东西现在已经不存在了,它被分支到了一个叫做Clamp的新项目。不过,话说回来……

……你可以把你的Python脚本预先编译成.class文件,方法是:

jython [jython的安装路径]/Lib/compileall.py [你存放Python代码的文件夹]

来源 - Jython通讯,2009年3月

我试着把一个包含Python 2.7代码的文件夹放进去(知道在Jython 2.5中会失败),结果它确实输出了一个.class文件,尽管这个文件并不能正常工作。你也可以试试你的Jython脚本。如果能成功,请告诉我们,因为我很快也会到你那边。

一旦你做到这一点,把你的命令行语句转换成PyDev中的外部工具就不难了,这样你就可以根据需要调用它。

撰写回答