不同语言有不同的优势,实际项目中的各个模块可能不是用同一种语言编写的。下面介绍在Python中调用java程序的过程。
首先得将想要导出的java文件生成jar包(一般而言,在我们的java文件中肯定会涉及到第三方java程序(jar),这里这种情况也适用)
如果我们要导出的java文件中引用了第三方的jar,我们将所有的第三方jar文件放在项目目录下的lib文件夹下(手动新建lib文件夹),另外,在正式生成jar之前,我们要先创建个文件,文件名为:MANIFEST.MF,文件内容如下:
Manifest-Version: 1.0
Class-Path: lib/jetty-6.1.26.jar
lib/jersey-server-1.9.jar
*****
Class-Path: lib/jersey-guice-1.9.jar
lib/commons-math3-3.1.1.jar ***
Class-Path: lib/commons-lang-2.6.jar
Main-Class: com.HBaseHelper com.Test
空行
第一行为版本号,可以不变
第二行:Class-Pass:
后面的内容为要导出的目标java文件中引用的第三方jar包,有时引入的jar包比较多时,可以写成分多行(一行太长的话后面会报错)
最后一部分为:Main-Class:即为你真正想导出的java文件,前面的“com”即为目标java文件“HBaseHelper.java”第一行的“package
com”,把上文中的“com”替换为你实际对应的java文件第一行对应的package
name即可(不需要“.java”后缀)
注:
1.Class-Path: 和Main-Class:
后边都有一个空格,必须加上,否则会打包失败,错误提示为:Invalid header field;
2.写完Main-Class后一定要回车(即最后一行是空白行),让光标到下一行,这样你生成的jar包才能找到你的主class去运行,否则将会出现“jar中没有主清单属性”的错误。
之后开始导出项目的jar文件:
eclipse中,选中项目文件->export->jar->选择导出jar的路径->next->next->下图:
选择刚刚写的MANIFEST.MF文件所在路径->finsih即可。
2.
Python中使用jar包
安装jpype包,并import
jpype后,如下:
jarpath =
os.path.join(os.path.abspath('.'), '../
#jar在Python中的路径(将jar文件拷贝到Python项目任意文件夹下面)
jpype.startJVM(jpype.getDefaultJVMPath(), "-ea",
"-D#不用修改
Test = jpype.JClass("com.Test")#获取类
#本个实例中,jar中com package里面有个Test
class,里面只有一个方法,test()
t =
Test()#创建类的对象,注意如果你将调用的方法为static方法也要先新建对象,否则会报错
Test.test()#调用java方法
jpype.shutdownJVM()#完成