3

我正在开发几个 java 包,然后作为 jar 文件分发。由于一些新的需求,我现在必须在 jython 中编写几个新功能;这些可能会涵盖分布在许多单独的 jython 文件中的大量代码。

我想继续为每个包分发一个 jar 文件。我进行了一些搜索,为我提供了两种方法,不幸的是它们都不是很好:

1) jythonc:我使用的是 jython 2.5.1,所以 jythonc 不再是发行版的一部分。此外,我不喜欢这会对我的 jython 代码施加的限制。

2) 将所有内容与 jython.jar 文件一起打包。不幸的是,这是不可能的;所有使用我的代码包的人在他们的环境中都已经有了一个 jython.jar 文件(其中许多人使用不同的版本)。换句话说,我的包必须在没有python核心的情况下分发;相反,我可以依赖它在目标系统的类路径中找到。

现在问题仍然存在,是否有另一种方法可以将我的所有 java 和 jython 代码打包在一个 jar 中,同时保持 jython.jar 文件不变?

4

1 回答 1

1

我终于找到了解决我的问题的方法。也许这对其他人也很感兴趣。提醒一下,这适用于顶部带有 java 的混合 java/jython 包,然后将交付给客户,而不是独立的应用程序。

1) 使用“jar”工具(或任何其他 zip 工具)将所有 jython 源文件放在 jar 文件顶层的单独文件夹中;我使用了文件夹“Lib”。

2) 从 java 访问 jython 代码是使用建模为单例的对象工厂类完成的(类似于这里描述的);从 jython 访问 java 可以直接使用完整的包名。

3)在我使用的对象工厂的构造函数中

String jarPath = myObjectFactory.class.getProtectionDomain().getCodeSource().getLocation() .getPath();

从代码中确定 jar 文件的位置。

4)我将jar文件中的“Lib”文件夹添加到jython模块查找路径中

PySystemState newState = new PySystemState(); newState.path.insert(0,Py.newString(jarPath + java.io.File.separator + "Lib")); Py.setSystemState(newState);

只要 jython.jar 文件包含在类路径中,这将起作用。

于 2012-12-05T14:52:54.507 回答