【问题标题】:How do I get the Jython PythonPath to reliably include java class paths?如何让 Jython PythonPath 可靠地包含 java 类路径?
【发布时间】:2010-11-08 16:27:00
【问题描述】:

问题

在eclipse下运行单元测试时,有没有办法可靠地确保python源路径编译的java类路径都添加到Jython PythonPath?

如果没有,是否有比将绝对路径添加到 PyDev PythonPath、外部库列表更好的解决方法?

背景

在继承自 Java 类的 Jython 类上运行 Jython 单元测试时遇到了一个奇怪的问题。

我们有一个 Eclipse RCP 应用程序,其结构(简化)如下:

Config project (Pydev nature only)
    scripts
        src
            classes.py
        test
            classesTest.py

Core project (Both Java & Pydev natures)
    scripts
    src
        baseClass.java
    classes
        baseClass.java

Library project (Both Java & Pydev natues, but no Jython scripts)
    src
        interface.java
    classes
        interface.class

classes.py 中,我导入baseClass,它实现了interface.java 中定义的interface。然后我创建了一个继承自 baseClass 的 Jython 类。

在我的classesTest.py 中,我导入类并定义单元测试。

当我尝试使用“Project explorer > classesTest.py > Run as > Jython unit-test”运行单元测试时出现问题:

  1. 有时它无法找到 baseClass(我认为它会因为 ImportError 而失败,但我现在无法重现)。
  2. 在其他时候它会找到 baseClass,但随后找不到 interface,因此它会以 java.lang.NoClassDefFoundError 失败。

如果我在测试模块的开头pprintsys.path,那么我可以看到:

  1. 虽然core/scripts 在python 路径上,但core/classeslibrary/classes 都不在路径上。
  2. core/scriptscore/classes 都在 python 路径上,但 library/classes 仍然不在。

有时,很少有两个类路径都添加到 python 路径并且单元测试工作正常,没有下面的解决方法。不幸的是,我还没有弄清楚如何重现它,并且在源代码树中的文件中看不到它工作和不工作之间的区别。

当前的解决方法

我目前的解决方法是显式地为library/classescore/classes 添加“外部库”。不幸的是,这些似乎必须是绝对路径,这意味着我必须为我使用的每个主干、分支或计算机设置不同的路径。因此,我不想将这些提交到修订控制中,每次都必须设置它们很痛苦。

注意事项

请注意,Config 项目仅引用核心项目,但显式引用库项目对类路径没有影响。

另外,在试图找到重现此问题的可靠方法时,我让其他库莫名其妙地从 python 路径中消失,然后又神秘地重新出现,最近的例子是 Mock!

更新

我最近没有看到这个问题(目前使用的是 Eclipse 3.7.1 和 PyDev 2.2.2)所以它可能是我当时使用的 Eclipse/PyDev 组合的异常。

【问题讨论】:

    标签: eclipse-rcp jython pydev


    【解决方案1】:

    对于 java 项目,您必须将包含 .class 文件的文件夹显式添加到 PYTHONPATH。

    推荐的组织是:

    java_project/bin

    python_project/src

    python_project 应该有对 java_project 的引用。

    请参阅http://pydev.org/manual_101_project_conf2.html 的最后部分作为参考。

    【讨论】:

      【解决方案2】:

      我遇到了类似的问题。最近通过相应地修改 Jython 注册表文件中的 python.path 字段来解决。

      看起来 Pydev 插件无法修改 sys.path 以便能够从 Eclipse 中的 Java 项目中导入 Python 模块。

      更多详情Adding in a python module to the sys.path for a Java project in pydev, Eclipse

      【讨论】:

        猜你喜欢
        • 2020-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多