Bootstrap

1、python调用java的jar包

在python中调用jar包

最近的项目功能需要调用客户的java接口,在调用接口的时候需要使用配套的jar包生成一些参数,但是公司的项目是用django搭建的,经过无数血与泪的尝试,最终终于找到了合适的方法去调用…

jpype包是一个Python的包,可以在python项目中调用java的jar包,并获取最终的返回值。使用方法很简单,但是安装的过程比较复杂。本文在ubuntu18.0.4系统,以python2以及jdk8为基础,讲解jpype包的使用。

1、安装java

首先去官网下载jdk1.8的tar包,放在/opt路径下,然后进行安装:

tar -zxvf jdk-8u261-linux-x64.tar.gz

安装完jdk之后,需要配置环境变量,在/etc/profile文件中添加以下内容:

set java environment
JAVA_HOME=/opt/java/jdk1.8.0_261        
JRE_HOME=/opt/java/jdk1.8.0_261/jre     
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH

重启环境变量:source /etc/profile

2、安装python的jpype包

找到项目依赖的python环境:

sudo find / -name site-packages

将下载的jpype包放在site-packages路径下。

3、使用示例

jpype中主要包含以下方法:

jpype.getDefalutJVMPath()    # 获取jvm所在的路径
jpype.startJVM()             # 开启虚拟机
demo = jpype.JClass('hello.Demo')   # 加载jar包中的Demo文件
demo.sayHello()     # 调用 sayHello 方法
jpype.shutdownJVM()  # 关闭虚拟机

代码示例:

def run_jar():
    jvm_path = "/opt/java/jdk1.8.0_261/jre/lib/amd64/server/libjvm.so"
	jar_path = os.path.join(os.path.abspath("."), "/home/youzi/ssojar/Hello.jar")
    jpype.startJVM(jvm_path, "-Djava.class.path=%s" % jar_path) # 启动虚拟机
    demo = jpype.JClass('Demo')  # 加载Demo类
    demo.sayHello()				 # 调用sayHello方法
    jpype.shutdownJVM()  # 关闭虚拟机
;