python 调用java 开发接口
有一个需求, 需要调用java的jar包, 因为擅长用python写程序, 那么就需要找个python包,调用java
选来选取, 找到了JPype
https://jpype.readthedocs.io/en/latest/
其他包不要好用,有些需要额外在其他地方启动jvm等.
遇到的最大困难就是安装
参考官网
pip install JPype1 出错
按官网建议
pip install python-dev 后,再安装也不行
download whl
pip install xxxx.whl 也不行,具体错不不描述了
解决办法:
upgrade pip
pip install .....whl 成功
具体code
=============python ===========================
import jpype
import jpype.imports
import os.path
jvmPath = jpype.getDefaultJVMPath() # 获得系统的jvm路径
jarpath = os.path.join(os.path.abspath('.'), 'javajar/md5Encoder.jar')
dependency = os.path.join(os.path.abspath('.'), 'javajar')
jpype.startJVM(jvmPath, "-ea", "-Djava.class.path=%s" % jarpath, "-Djava.ext.dirs=%s" % dependency) # 当有依赖的JAR包存在时,一定要使用-Djava.ext.dirs参数进行引入
jpype.java.lang.System.out.println("hello world")
try:
aa = jpype.JClass('org.loushang.bsp.security.encoding.BspEncoder')
except Exception as e:
print(e)
BspEncoder = jpype.JClass('org.loushang.bsp.security.encoding.BspEncoder')
Md5PasswordEncoder = jpype.JClass('org.loushang.bsp.security.encoding.Md5PasswordEncoder')
bspEncoder = BspEncoder()
md5PasswordEncoder=Md5PasswordEncoder()
bspEncoder.setEncoder(md5PasswordEncoder)
res=bspEncoder.encodePassword('aaa')
print(res)
jpype.shutdownJVM() # 关闭jvm
===========end =============
=============相同处理,如果用java写 ===========================
public static void main(String[] args){
BspEncoder bspEncoder = new BspEncoder();
bspEncoder.setEncoder(new Md5PasswordEncoder());
String st1 = bspEncoder.encodePassword("superadmin");
System.out.println(st1);
String aa1=bspEncoder.encodePassword("aaa");
System.out.println(aa1);
String aa2=bspEncoder.encodePassword("1qaz@WSX");
System.out.println(aa2);
}
=============相同处理,如果用java写 end ===========================
调用的java需要2个jar包,如图