登 录
注 册
< 编程语言
Python
Java
Go
SQL
数据结构与算法
极速安装
线程同步与信号量
生产者消费者
Python调用Java
Python自动发送邮件
数据导出工具
热门推荐>>>
中台架构
中台建设与架构
Hadoop
源码分析-NN启动(三)
HBase
HBased对接Hive
Linux
Nginx高可用
Flink
3分钟搭建Flink SQL测试环境
Kafka
Kafka对接Flume
深度学习
卷积神经网络
数据结构与算法
选择合适的算法
MySQL
数据备份恢复
计算机系统
信号量同步线程
Hive
Hive调优参数大全
其他框架
Azkaban Flow1.0与2.0
ClickHouse
表引擎-其他类型
技术成长
最好的职业建议
精选书单
技术成长书单—机器学习
技术资讯
数据在线:计算将成为公共服务
开发工具
IntelliJ IDEA 20年发展回顾(二)
系统工具
Mac命令行工具
虚拟化
内存虚拟化概述
云原生
云原生构建现代化应用
云服务
一文搞懂公有云、私有云...
Java
Spring Boot依赖注入与Runners
Go
Go函数与方法
SQL
SQL模板
安全常识
一文读懂SSO
当前位置:
首页
>>
Python
>>
Python调用Java
Python调用Java
2020-07-04 11:18:14 星期六 阅读:2291
![](/static/images/article_images/1693753807.6039622.jpeg) 在实际工作中,使用Python开发的小伙伴,可能某个功能需要Java来实现(毕竟Java的生态以及工业性更强,比如:解析SQL这种复杂的功能,目前找不到更好的Python SDK)。以下通过一个实例来演示实际工作中使用Python调用Java,并传递参数执行的过程。 原理`其实就是在Python进程里临时启动一个JVM来执行jar包` ####准备工作 ``` # 安装jpype包 $ pip3 install jpype1 ``` ####需求 Java封装一个加法的函数,该函数接收两个Python传过来的参数,返回计算好的结果给Python程序。 ####Java编写程序 ``` package com.python.java; // 生产中需要增加try cache 这里忽略了异常处理 public class JavaTest { public int add(int a, int b) { return a + b; } } ``` ####把Java程序打成jar包[使用IDEA] ``` File---> Project Structure--->Artifacts--->点击+号--->JAR--->From modules with dependencies--->配置jar包的名字及输出路径等 选择菜单栏Build--->Build Artifacts--->选择需要打的jar包名字 ``` ####编写Python程序调用jar包 ```python import jpype from jpype import * # 配置需要执行的jar包路径 jar_path = "/Users/libins/VsCode/java.test/out/artifacts/java_test_jar/java.test.jar" # 启动JVM,传入jar包路径 # 注意,如果jar包有依赖,则还需传入(-Djava.ext.dirs=)参数指定依赖包的路径 jpype.startJVM(getDefaultJVMPath(), "-ea", "-Djava.class.path={}".format(jar_path), convertStrings=True) # 实例化jar包对象(后面的参数是包名.类名) instance = jpype.JClass("com.python.java.JavaTest")() # 调用add函数传入参数执行 ret = instance.add(100, 200) print(ret) jpype.shutdownJVM() # 如果不显示关闭,则直到Python程序关闭后才自动关闭 ``` 输出结果 300