美文网首页自动化
JPype:python脚本调用java对象示例

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

作者: 佛系小懒 | 来源:发表于2020-02-04 12:06 被阅读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")

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/hakrxhtx.html