python调用jar中java方法 静态类为例

发布于:2024-03-12 ⋅ 阅读:(34) ⋅ 点赞:(0)

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

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到