本文在Jython的Wiki上详细介绍了在jar中分发Python文件的最新最佳技术:http
:
//wiki.python.org/jython/JythonFaq/DistributingJythonscripts
对于您的情况,我想您将要使用安装Jython时获得的jython.jar文件并将Jython
Lib目录压缩到其中,然后将.py文件压缩到其中,然后添加
__run__.py具有启动逻辑的文件(该文件由Jython专门处理,并且将是您使用“
java -jar”调用jar时执行的文件。
这个过程肯定比应该要复杂的多,因此我们(Jython开发人员)需要提出一个很好的工具来自动执行这些任务,但是现在这是最好的方法。下面,我将在上面文章的底部复制配方(略作修改以适合您的问题描述),以使您对解决方案有所了解。
创建基本的jar:
$ cd $JYTHON_HOME$ cp jython.jar jythonlib.jar$ zip -r jythonlib.jar Lib
将其他模块添加到jar中:
$ cd $MY_APP_DIRECTORY$ cp $JYTHON_HOME/jythonlib.jar myapp.jar$ zip myapp.jar Lib/showobjs.py# Add path to additional jar file.$ jar ufm myapp.jar othermanifest.mf
添加
__run__.py模块:
# Copy or rename your start-up script, removing the "__name__ == '__main__'" check.$ cp mymainscript.py __run__.py# Add your start-up script (__run__.py) to the jar.$ zip myapp.jar __run__.py# Add path to main jar to the CLASSPATH environment variable.$ export CLASSPATH=/path/to/my/app/myapp.jar:$CLASSPATH
在MS Windows上,设置CLASSPATH环境变量的最后一行看起来像这样:
set CLASSPATH=C:pathtomyappmyapp.jar;%CLASSPATH%
或者,再次在MS Windows上,使用“控制面板”和“系统”属性来设置CLASSPATH环境变量。
运行应用程序:
$ java -jar myapp.jar mymainscript.py arg1 arg2
或者,如果您已将启动脚本添加到jar中,请使用以下方法之一:
$ java org.python.util.jython -jar myapp.jar arg1 arg2$ java -cp myapp.jar org.python.util.jython -jar myapp.jar arg1 arg2$ java -jar myapp.jar -jar myapp.jar arg1 arg2
double -jar有点烦人,因此,如果要避免这种情况并获得更令人愉悦的效果:
$ java -jar myapp.jar arg1
您将需要做更多的工作,直到我们在将来的Jython中得到类似的东西为止[更新:JarRunner是Jython
2.5.1的一部分]。这是一些
__run__.py自动查找并运行它的Java代码。请注意,这是我在这堂课上的第一次尝试。让我知道是否需要改进!
package org.python.util;import org.python.core.imp;import org.python.core.PySystemState;public class JarRunner { public static void run(String[] args) { final String runner = "__run__"; String[] argv = new String[args.length + 1]; argv[0] = runner; System.arraycopy(args, 0, argv, 1, args.length); PySystemState.initialize(PySystemState.getbaseProperties(), null, argv); imp.load(runner); } public static void main(String[] args) { run(args); }}我将此代码放入org.python.util包中,因为如果我们决定将其包含在将来的Jython中,它将放在那里。要进行编译,您需要将jython.jar(或myapp.jar)放入类路径中,如下所示:
$ javac -classpath myapp.jar org/python/util/JarRunner.java
然后,您需要将JarRunner.class添加到您的jar中(类文件将需要在org / python / util /
JarRunner.class中),在“ org”目录上调用jar将使整个路径进入您的jar中。
$ jar uf org
将此添加到将用于更新清单的文件中,一个好名字是manifest.txt:
Main-Class: org.python.util.JarRunner
然后更新jar的清单:
$ jar ufm myapp.jar manifest.txt
现在您应该能够像这样运行您的应用程序:
$ java -jar myapp.jar



