自动化

JPype:python脚本调用java对象示例

2020-02-04  本文已影响0人  佛系小懒

前置环境

pip install JPype1-py3

验证测试

import jpype

print(jpype.getDefaultJVMPath())

Linux输出JDK下的libjvm.so的路径:./jdk1.8.0_191/jre/lib/amd64/server/libjvm.so

window下对应的是jvm.dll

中间过程出现如下情况:

ImportError: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found 不存在,通过如下4条命令进行解决:

strings /usr/lib64/libstdc++.so.6 | grep GLIBC

find / -name "libstdc++.so*"

ls -al /usr/lib64/libstdc*   查看软连接详情,将原来低版本软连接进行删除,同时将高版本/usr/lib64/libstdc++.so.6.0.21 重命名为/usr/lib64/libstdc++.so.6.0.20 进行软连接

mv /usr/lib64/libstdc++.so.6.0.21 /usr/lib64/libstdc++.so.6.0.20 && ln -s /usr/lib64/libstdc++.so.6.0.20 /usr/lib64/libstdc++.so.6

实际使用过程:

startJVM("$JAVA_HOME/jre/lib/amd64/server/libjvm.so", "-ea")   #  通过jpype.getDefaultJVMPath() 拿到libjvm.so所在的路径

import jpyp

print(jpype.getDefaultJVMPath())

jpype.startJVM(jpype.getDefaultJVMPath(), "-ea")

jpype.java.lang.System.out.println("hello World")

示例DEMO

if __name__ == '__main__':

    import jpype

    print(jpype.getDefaultJVMPath())

    spec_jar = "XXXXX" #XXXXXXXX类所在jar对应的路径

    ############启动JVM#########################

    jarpath = os.path.join(os.path.abspath('.'), spec_jar)

    java_home = XXXXX

    jre_lib_ext=java_home+"/jre/lib/ext/"

    dependency = os.path.join(os.path.abspath('.'), jre_lib_ext)  

    #默认不会加载jre/lib/ext路径下的jar,所以需要手动添加

    jpype.startJVM(jpype.getDefaultJVMPath(), "-ea", "-Djava.class.path=%s" % jarpath,"-           Djava.ext.dirs=%s" % dependency) 

   # 当有依赖的JAR包存在时,一定要使用-Djava.ext.dirs参数进行引入

    ############实例化Java对象#######################

    JClass = jpype.JClass('XXXXXXXX')

    instance = JClass()

    jpype.java.lang.System.out.println("hello World")

上一篇下一篇

猜你喜欢

热点阅读