2017-05-26 68 views
1

我正在研究一個Java應用程序,在該應用程序中,我編寫了一個用於執行任務的Jython腳本。該代碼正常工作,Jython腳本在通過Eclipse IDE執行時執行。 但是,當我將Java應用程序導出爲.jar文件時,Jython腳本無法運行。帶有Jython腳本的Java代碼

這是我在Eclipse IDE下面的目錄結構:

application.jar 
    |-- com 
     |--example 

      |-- package1 
      |-- Function2.Java 
      |-- pre_myAction.py 

      |-- package2 
      |-- Function1.Java 

我想打電話從Function1.java的script_function以下列方式:

PythonInterpreter interp = new PythonInterpreter(); 
interp.execfile(".//com//example//pre_myAction.py"); 
String funcName = "function1"; 
PyObject someFunc = interp.get(funcName); 

if (someFunc == null) { 
    throw new Exception("Could not find Python function: " + funcName); 
} 

try { 
    interp.set("DataMap", dataMap); 
    someFunc.__call__(new PyString(file1)); 
    } catch (PyException e1) { 
    LOGGER.log(Level.SEVERE, e1.getMessage()); 
} 

interp.cleanup(); 
interp.close(); 

當我試圖從命令提示符執行jar我得到這個錯誤:

File not found -//com//example//pre_myAction.py 

An d相同的代碼在Eclipse IDE中執行時沒有任何錯誤。

任何人都可以提供關於如何在jar文件中執行jython腳本的解決方案或建議。

+0

「不運行」不會讓我們繼續下去。什麼是錯誤信息? 你是如何調用Jar的?你是否能夠以同樣的方式運行簡單的Jython腳本? – dimo414

+0

當您在命令行上運行該jar時 - 是否爲jython啓用java?順便說一句:你的代碼「示例」不包含任何代碼。 – GhostCat

+0

它看起來像pre_myAction.py在com/example/package1中,而不是com/example。爲什麼這將在Eclipse IDK中起作用。編輯:沒關係,我想我明白了。 – jaxad0127

回答

0

通過Jython代碼的快速瀏覽器,它看起來像PythonInterpreter.execfile(String)將在文件系統中查找文件,而不是JAR。您可以嘗試使用Class.getResourceAsStream並使用該方法的InputStream版本進行查找。

看起來Jython會自動從JAR的根目錄加載文件,這會給CPython帶來行爲鏡像。有關詳細信息,請參閱Bundling python files inside jar for access via jython