python调用java方法在使用中的bug

业务中突然需要用掉别人给的第三方sdk,但是sdk是java写的,还好python有个jpype的包可以调用java的方法,不过还是深受其害,折腾了一个星期终于是弄好了,期间也百度了很多博客,报错都是何其的相识,基本都是同样的问题同样的答案。

对于jpype的坑,首先我不会java,个人觉得有以下几点:

1、ubuntu中java的jdk的版本和java的代码的版本最好能兼容

2、如果java代码中有用到第三方包(不是在安装jdk中系统自带的包),那么这个就要注意了,这些包你要放到jdk目录下的jre目录下的ext目录中,一般情况下jre目录下是没有ext目录的,反正我安装了好几次都没有这个目录,这个目录我是自己新建的。

3、java的.java文件的打包,分为好几步,因为不懂java,踩了不少坑

     坑1、python调用java方法在使用中的bugpython调用java方法在使用中的bug,这个package后面一般有以点为分割的多级路径,我这里是一个路径,也就是com,如果是多级路径,比如com.com1.com2;这种,那么你在吧.java文件编译成.class文件时,要把.class文件放到这个多级目录的最里面一级,我这里是一级com,所以就放到了com下,编译命令jacac *.java,编译好了之后就可以打包了,打包命令 jar -cvf yourfilenam.jar /你的.class的文件路径,然后就会生成一个.jar的文件

    坑2、打包好了之后,这个java文件是执行不了的,还有重要的一步,这也是不懂java的坑,就是添加所谓的清单了,需要用vim 打开刚刚打包好的jar文件,我这里是vim DESUtil.jar,然后修改里面的东西,用vim打开后出现这个python调用java方法在使用中的bug这里面也就是打包后的文件和文件夹,选择.MF这个文件,然后就会弹出python调用java方法在使用中的bug,需要手动添加第三行,也就是包中类的路径,这些弄好后,就可以在py中导入了,

坑3、有的人说用pip install jpype1会有问题,反正我是没出现过这个问题

坑4、最难,最烦的坑python调用java方法在使用中的bug

前面提过的java中如果有第三方的jar包(不是安装中自带的),那么就需要在startJVM中添加一个"-Djava.ext.dirs=%s" %dependency这么一个参数,这个参数使用来找那些第三方jar包的,比如的这个路径就是dependency = "/usr/lib/jvm/jdk1.8.0_181/jre/ext",如果这个没有的话,执行时java代码就会报错,而且这个错也是java中常见的错,然后就是生成java的类对象了,有两种方法,上面都有,可以都试一下,如果package后面跟的包的路径比较多的话,建议用第二种生成类对象,JDClass如果java在构造对象时有参数则需要传,没有的话就不用传了。