【问题标题】:How to distribute a java package including jython code in one jar?如何在一个 jar 中分发包含 jython 代码的 java 包?
【发布时间】:2012-11-18 21:25:30
【问题描述】:

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

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

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

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

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

【问题讨论】:

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

标签: java python distribution jython


【解决方案1】:

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

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

2) 从 java 访问 jython 代码是使用建模为单例的对象工厂类完成的(类似于here 描述的那个);从 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 文件包含在类路径中,这将起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    相关资源
    最近更新 更多