python文件封装成jar_使用Jython将我的Python脚本作为JAR文件分发吗?

本文介绍了如何使用Jython将Python脚本封装到JAR文件中,包括复制jython.jar,添加所需的Python模块,创建__run__.py,调整CLASSPATH,以及编写和编译Java类JarRunner以实现自动运行。这个过程相对复杂,但提供了一种将Python脚本作为Java应用程序分发的方法。
摘要由CSDN通过智能技术生成

本文在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:\path\to\my\app\myapp.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的一部分]。 这是一些Java代码,它们会自动查找__run__.py并运行它。 请注意,这是我在这堂课上的第一次尝试。 让我知道是否需要改进!

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值