一、Java的Maven项目打包
环境:Eclipse(Java EE IDE)
在项目名上右击-->Export-->Java-->JAR file
直接Finish。
打包完后,会有一个Detail,看一下里面是否有需要的文件没打包上。我这边是因为文件里面有黄色警告,一些import *** 没有使用,一些变量没有使用,把警告消除掉就可以打包上了。
二、Python对生成的jar包的调用
import jpype
import os
def rtree():
"""
基本的开发流程如下:
①、使用jpype开启jvm
②、加载java类
③、调用java方法
④、关闭jvm(不是真正意义上的关闭,卸载之前加载的类)
"""
# todo 1, 使用jpype开启虚拟机(在开启jvm之前要加载类路径)
jarpath = os.path.join(os.path.abspath("."), "data/rtree.jar")
# jarpath1,jarpath2是Java程序中调用的依赖包
jarpath1 = os.path.join(os.path.abspath('.'), 'data/rxjava-1.3.3.jar')
jarpath2 = os.path.join(os.path.abspath('.'), 'data/rxjava-string-1.1.1.jar')
# 获取jvm.dll 的文件路径
# jvmPath = jpype.getDefaultJVMPath() # 获取默认的jvm.dll路径,也可以直接写你的jvm.dll路径
jvmPath = r'D:\Eclipse_Install\jre-8u211-windows-x64\jre1.8.0_211\bin\server\jvm.dll'
# 开启jvm:.如果是调用多个jar文件的话,要在jvm启动时指定jar文件路径,jarpath,jarpath2,jarpath3是jar文件路径。
jpype.startJVM(jvmPath, "-ea", "-Djava.class.path=%s;%s;%s" % (jarpath, jarpath1, jarpath2))
# todo 2, 加载java类(参数是java的长类名)
# EntriesTest可以
javaClass = jpype.JClass("com.github.davidmoten.rtree.GxhLatLonTest2")
# 实例化java对象
# javaInstance = javaClass()
# todo 3, 调用java方法,由于我写的是静态方法,直接使用类名就可以调用方法
javaClass.start("D")
print('---------------')
javaClass.start("O")
# todo 4, 关闭jvm:jvm随着python程序的退出而结束
jpype.shutdownJVM()
if __name__ == '__main__':
rtree()
注意:调用Java方法时,要看是否需要传参数。
如果运行出错,提示java.lang.NoClassDefFoundError,看是否这个类在运行时,是直接通过网络调用了GitHub上的程序,如果是,把这个项目下载下来放到你Java程序中对应的位置,更新后,重新打jar包。