2014-03-28 109 views
0

問題聲明:我使用PySystemState在java類中調用我的jython模塊並對其執行一些方法。現在的問題是我的jython模塊對位於同一個jython項目中的paralled目錄中的一些其他jython模塊有依賴性。因此,當我調用目標模塊時,會拋出導入異常,說明依賴模塊無法找到。從java調用jython方法:找不到導入的模塊

我的Jython項目的結構:

jythonproject 
    -src 
    -folder1<has the module which is invoked from java> 
    -folder2 < it has the modules which the module inside folder1 imports with statemet "from folder2 import x" 

異常=>命名的文件夾2

無模式請注意,在Java項目我設立JYTHONPATH環境變量與路徑兩者的folder1和文件夾2。

我使用eclipse環境與jython 5.3。

2) 更多研究:我使用PySystemState從java調用jython模塊。這是加載模塊和類的規範。

// Constructor obtains a reference to the importer, module, and the class name 
public JythonObjectFactory(PySystemState state, Class interfaceType, String moduleName, String className) { 
    this.interfaceType = interfaceType; 
    PyObject importer = state.getBuiltins().__getitem__(Py.newString("__import__")); 
    PyObject module = importer.__call__(Py.newString(moduleName)); 
    klass = module.__getattr__(className); 
    System.err.println("module=" + module + ",class=" + klass); 
} 

NOw它似乎只導入folder1中的模塊,然後獲取其中的類來調用方法。現在,由於此模塊已從位於folder2中的其他模塊導入,並且它們未在java代碼中加載,因此無法找到該模塊。 現在的問題是我應該如何加載folder2中的依賴模塊以及我需要的folder1中的模塊。

夥計們我注意到一個更多的東西在模塊中導入我從java調用的文件夾2中的模塊沒有它的類。所以我從java調用的模塊有一個我正在調用的類,並且該類依賴於具有某些方法但不是類的jython模塊。無論如何,這就是它不能正常工作的原因,而且我得到了一個例外。

嘗試一些其他的東西,這裏是結果: 方案1: 的pkg1已與class1的MODULE1 了pkg2與等級2 和組件1 MODULE2有一個進口=>從模塊2進口的Class2 現在,當我從調用類class1 Java程序這工作正常。

Scenario2: 的pkg1已與class1的 pkg2的MODULE1具有己方法定義模塊2和無級 和組件1有一個進口=>從pkg2的進口模塊2 現在,當我從Java程序調用class1的,這將引發了我的異常。

結論: 1)從java調用jython類時,我們無法使用從包導入。 2)我們不能從java中調用jython類,它從沒有類的模塊(僅僅是方法定義)導入。由於jython在這種情況下只允許「從pkg導入」,因此在第1點我們將遇到問題。

回答

相關問題