有没有办法可靠地确保在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
中定义的interface.java
。然后我创建一个继承自baseClass
。
在我的classesTest.py
中,我导入类并定义单元测试。
当我尝试使用“Project explorer> classesTest.py> Run as> Jython unit-test”运行单元测试时出现问题:
baseClass
(我认为它失败了ImportError
,但我现在无法重现这一点。)baseClass
,但找不到interface
,因此java.lang.NoClassDefFoundError
失败。如果我在测试模块的开头pprint
sys.path
,那么我可以看到:
core/scripts
位于python路径上,但core/classes
和library/classes
都不在路径上。core/scripts
和core/classes
都在python路径上,但library/classes
仍然没有。有时候,很少将这两个类路径添加到python路径中,并且单元测试工作正常,没有下面的解决方法。不幸的是,我还没有弄清楚如何重现这一点,并且可以看到源代码树中的文件在工作和不工作之间没有区别。
我目前的解决方法是明确地为library/classes
和core/classes
明确添加“外部库”。不幸的是,它们似乎必须是绝对路径,这意味着我必须为我使用的每个主干,分支或计算机设置不同的路径。因此,我不想将这些提交到版本控制中,每次都要设置它们是一件痛苦的事。
请注意,Config项目仅引用核心项目,但显式引用库项目对类路径没有任何影响。
此外,在尝试找到一种可靠的方法来重现这个问题时,我让其他库莫名其妙地从python路径中消失,然后就像神秘地重新出现一样,最近的例子是Mock!
我最近没有看到这个问题(目前正在使用Eclipse 3.7.1和PyDev 2.2.2),所以它可能是我当时使用的Eclipse / PyDev组合的一个例子。
答案 0 :(得分:1)
对于java项目,您必须将包含.class文件的文件夹显式添加到PYTHONPATH。
推荐的组织是:
java_project / bin< - 此文件夹应设置为PyDev中的源文件夹(要添加到PYTHONPATH)。 java_project / src< - 此文件夹应添加到jdt类路径中,但不应在PyDev中有任何引用
python_project / src< - 此文件夹应设置为PyDev中的源文件夹(将添加到PYTHONPATH中)。
python_project应该引用java_project。
请参阅http://pydev.org/manual_101_project_conf2.html的最后一部分作为参考。
答案 1 :(得分:0)
我有类似的问题。最近解决了相应修改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
的更多详情