带有Jython脚本的Java代码

时间:2017-05-26 04:21:05

标签: java eclipse jython

我正在开发一个Java应用程序,其中我编写了一个Jython脚本来执行任务。代码工作正常,Jython脚本在通过Eclipse IDE执行时执行。 但是当我将Java应用程序导出到.jar文件时,Jython脚本不会运行。

这是我在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

相同的代码在Eclipse IDE中执行,没有任何错误。

任何人都可以提供有关如何在jar文件中执行jython脚本的解决方案或建议。

1 个答案:

答案 0 :(得分:0)

快速浏览Jython代码,看起来像PythonInterpreter.execfile(String)将在文件系统中查找文件,而不是JAR。您可以尝试使用Class.getResourceAsStream并使用方法的InputStream版本进行查找。

看起来Jython会自动从JAR的根目录加载文件,从而提供镜像CPython的行为。有关详细信息,请参阅Bundling python files inside jar for access via jython