如何在一个jar中分发包含jython代码的java包?

如何在一个jar中分发包含jython代码的java包?,java,python,distribution,jython,Java,Python,Distribution,Jython,我正在开发几个java包,然后作为jar文件分发。 由于一些新的需求,我现在必须在jython中编程几个新特性;这些可能会涵盖分布在许多独立jython文件上的大量代码 我想继续为每个包分发一个jar文件。我的一点搜索为我提供了两种方法,不幸的是这两种方法都不是很好: 1) jythonc:我正在使用Jython2.5.1,因此jythonc不再是发行版的一部分。此外,我不喜欢这会对我的jython代码造成限制 2) 将所有内容与jython.jar文件打包在一起。不幸的是,这是不可能的;所有使

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

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

1) jythonc:我正在使用Jython2.5.1,因此jythonc不再是发行版的一部分。此外,我不喜欢这会对我的jython代码造成限制

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


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

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

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

2) 从java访问jython代码是使用建模为单例的对象工厂类完成的(类似于所描述的);从jython访问java非常简单,只需要完整的包名

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

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

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

4) 我使用以下命令将jar文件中的“Lib”文件夹添加到jython模块查找路径

PySystemState newState=新的PySystemState();
insert(0,Py.newString(jarPath+java.io.File.separator+“Lib”);Py.setSystemState(newState)


只要jython.jar文件包含在类路径中,这就行。

这个问题与我的答案非常相似,作者喜欢我的答案:)Frank,谢谢你的回答。不幸的是,这对我没有帮助。您的建议就是使用我自己的东西扩展jython.jar文件。最后我想得到的是一个jar文件,其中包含我所有的java和jython代码(我分发)和一个单独的、未修改的jython.jar(我不分发)。正如我所说,我的jar分发给的所有人的环境中都已经有一个jython.jar(他们不能/不想覆盖)。我不想让jython内核出现在我分发的jar文件中,而是从一个单独的jar文件中引用它。另一方面,我自己的jython代码应该包含在分布式jar文件中。有道理-很高兴你找到了答案:)顺便说一句,对不起,我没有注意到你的快速响应-我对你的解决方案投了赞成票。