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 os
if __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"
# 无第三方jar
jar_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 string
print(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