Python调用Jar包

Python调用Jar包

彼方 965 2022-11-20

前言

工作原因,需要在Python代码中调用一个Jar包中的加密方法,本来是想用Python重写加密方法的,但是看了一下Java代码,加密方法很是复杂,用到了SM2,SM4组合加密,因此还是选择使用Python直接调用Jar包的方式来进行数据加密,下面为调用方式。

本文不研究Jpype的原理,有兴趣可以自行搜索

调用方式

使用的库

Python调用Jar包主要使用的是JPype,导入的库名称为JPype1,这个不要导入错了
可以直接控制台输入这个命令导入:pip3 install JPype1

使用方式

  1. 在IDEA中将Jar包打好,此处不使用maven打包,因为一般这个加密方法都不是使用的框架,而是单独的几个工具方法,所以使用普通的打Jar包方法就行,这里不再赘述,如有需要可以百度 IDEA打Jar包

  2. Jar包打好之后,将Jar放在Python项目中,最好是文件同层级目录,如下图:
    python01

  3. 引入之后可按以下代码来调用Jar包中的方法

        # 启动jvm虚拟机
        jvm_path = jpype.getDefaultJVMPath()
        jpype.startJVM(jvm_path, '-ea', '-Djava.class.path=%s' % 'client.jar', convertStrings=False)
        # 加载类
        jclass = jpype.JClass('com.util.SGClientUtils')
        # 传入所需参数
        sm2Util = jclass()
        # 调用具体的加密方法
        sm2Util.encryption(参数)
        # 关闭虚拟机(必须保证最后关闭虚拟机,可以使用try finally)
        jpype.shutdownJVM()

一些小问题

  1. 打Jar包的时候要注意主方法的选择
  2. 使用Jpype开启JVM虚拟机时,只能开启一次,Jpype不允许重复开启关闭虚拟机,重复开启关闭会报错,所以使用的时候要注意写法。