2017-05-26 74 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