java
package test;public class test {// run方法返回当前脚本路径public static String runV1(String s) {return "log: " + System.getProperty(s);}}
python
import jpype
from jpype import *
import osif __name__ == "__main__":print(os.environ['JAVA_HOME'])os.environ['JAVA_HOME'] = r'/Users/thomas990p/Library/Java/JavaVirtualMachines/azul-11.0.21/Contents/Home'print('----> ',jpype.getDefaultJVMPath())arg_d1 = "-Dk111=v111"# 无第三方jarjar_path = "/Users/thomas990p/IdeaProjects/FlinkLocalDemo/target/FlinkLocalDemo-1.0-SNAPSHOT.jar"startJVM(jpype.getDefaultJVMPath() , arg_d1 , "-ea" , "-Djava.class.path=" + jar_path)# 调用jar中静态方法 test.test#run 无参数test = JClass("test.test")# 注意 这里返回的是java string,必须使用str() 转换为python stringprint(str(test.runV1("k111")))shutdownJVM()
输出
/Users/thomas990p/Library/Java/JavaVirtualMachines/azul-1.8.0_362-1/Contents/Home
----> /Users/thomas990p/Library/Java/JavaVirtualMachines/azul-11.0.21/Contents/Home/lib/jli/libjli.dylib
log: v111
---
java string不转换为 python string 会导致pyflink table api execute sql报错 :
2024-03-11T03:17:07.830053632Z stdout F File "/opt/flink/opt/python/pyflink.zip/pyflink/table/table_environment.py", line 837, in execute_sql
2024-03-11T03:17:07.830200236Z stdout F File "/opt/flink/opt/python/py4j-0.10.9.7-src.zip/py4j/java_gateway.py", line 1314, in __call__
2024-03-11T03:17:07.830235846Z stdout F File "/opt/flink/opt/python/py4j-0.10.9.7-src.zip/py4j/java_gateway.py", line 1283, in _build_args
2024-03-11T03:17:07.830262554Z stdout F File "/opt/flink/opt/python/py4j-0.10.9.7-src.zip/py4j/java_gateway.py", line 1283, in <listcomp>
2024-03-11T03:17:07.830329575Z stdout F File "/opt/flink/opt/python/py4j-0.10.9.7-src.zip/py4j/protocol.py", line 298, in get_command_part
2024-03-11T03:17:07.830442972Z stdout F AttributeError: 'java.lang.String' object has no attribute '_get_object_id'
20