python调用java代码-py4j包实例

问题陈述

我有一段java代码,希望在python里跑一跑。(其实也可以改写代码到python,懒癌)
当前没有打jar包,只是调用函数。
为什么选py4j而不是jpype? 参考
上面的博主说:jpype 和 py4j 有相同的核心开发者,后者的出现是因为开发者认为 jpype 的底层架构不够好,py4j是更好的版本。

更新

2020/7/8
之前使用py4j包,要求java程序要先于python程序运行,且调用函数耗时很多。改用jpype,打包成jar再使用,时间消耗变成原来的1/66。我写的jpype小实例

安装

python部分

pip install py4j

我在anaconda的虚拟环境装的,此时py4j包对应的jar包,在

C:\Users\Dell.m2\repository\net\sf\py4j\py4j\0.10.9

配置Eclipse

在java项目上引入该java包。比如普通java项目,添加到Referenced Libraries
python调用java代码-py4j包实例_第1张图片
如果是maven项目,修改pom文件。这里我的版本号是跟pip安装的一致的。不清楚版本号的,去maven市场 这里 查。

<dependency>
   <groupId>net.sf.py4j</groupId>
   <artifactId>py4j</artifactId>
   <version>0.10.9</version>
</dependency>

实例

java代码

package test;

import py4j.GatewayServer;
import java.util.Random;

public class BM {

    // 这里写你自己的函数...例如
    public static int matchTest(String a, String b) {...}

    public static void main(String[] args) { 
        BM app = new BM();
        GatewayServer gs = new GatewayServer(app);
        gs.start();
        System.out.println("BM started!");
    }
}

python代码

from py4j.java_gateway import JavaGateway

def test_search(raw, target):
    gateway = JavaGateway()
    # 这个matchTest()函数就是java里的那个函数
    return gateway.entry_point.matchTest(raw, target)

执行

先在eclipse里运行java程序,然后执行python程序,即可。

你可能感兴趣的:(工作技巧,java,python,eclipse)