问答 python 调用 java 项目

学学看看 · 2023年10月26日 · 最后由 学学看看 回复于 2023年10月27日 · 4883 次阅读

公司有个 java 的 spring 项目,使用 maven 打成 jar 包,使用 python 调用加载的时候提示找不到类,有过调用 spring 项目经验的大佬给看下什么问题?
此时当调用到 CryptUtil = jpype.JClass("com.finance.micro.api.util.CryptUtil") 这个加载类的时候就报错,

import jpype
import os,json

path = r"D:\xx\xx\wjctest\wjctest.jar"
jar_path = os.path.join(os.path.abspath("."), path)

# 获取jvm.dll的文件路径
jvmPath = jpype.getDefaultJVMPath()
print("获取的jvm路径", jvmPath)

# 启动jvm
jpype.startJVM(jvmPath, "-Dfile.encoding=UTF8", "-ea", "-Djava.class.path=%s" % jar_path)
print("看到了")

# 加载java类(参数是java的长类名)
CryptUtil = jpype.JClass("com.*.*.api.util.CryptUtil")
# 库名加*
ChannelLoginDTO = jpype.JClass("com.*.*.dto.ChannelLoginDTO")
privateKey = "这里是私钥";
publicKey = "这里是公钥";

instance = ChannelLoginDTO()
instance.setChannelCode("C20220928180834695958");
instance.setCustomerName("123");
instance.setPhone("18511552233");
instance.setCertNo("612823199203631536");

params = CryptUtil.buildRequest(json.loads(x), privateKey, publicKey)
print("打印的参数",params)

# 关闭jvm
jpype.shutdownJVM()

具体的报错如下:
Traceback (most recent call last):
File "D:/microFinanceProject/qa-test/test.py", line 16, in
CryptUtil = jpype.JClass("com.finance.micro.api.util.CryptUtil")
File "D:\Program Files\Anaconda3\lib\site-packages\jpype_jclass.py", line 99, in new
return _jpype._getClass(jc)
TypeError: Class com.finance.micro.api.util.CryptUtil is not found

后来自己如果单独写一个 java 项目,不使用 spring 和 maven 这种框架,打成的 jar 调用就没问题,spring 项目使用 maven 打包 jar,调用的时候就有问题,哪位老板成功用 python 调用 maven 打的 spring 项目的 jar 包,能否贴个示例或者发下注意事项?

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 7 条回复 时间 点赞

私钥和公钥不打个码么

jvmPath = jpype.getDefaultJVMPath(),这里打印出来是啥?是 jvm.dll 么?

看下是否是 32 位,64 位 python 造成的问题。装个 32 位的 python 试下。

我可以跑,不过我是直接加载了一个 class 文件,没有加载 jar 包,然后我跑的时候我记得当时遇到的坑是 64 位的 python 不行,换了 32 的就可以了,包括依赖库也要 32 位的

Barry250 回复

😹 我也想说

兄弟你打码打了个寂寞,赶紧删了吧,另外加密解密,实在不行自己写个接口调用也行

我给楼主修改了,注意类库也要加 *

你先单独运行下这个 jar 包看看能否启动,如果不能启动。首先你要区分这个类下面有没有 main 方法。

import subprocess
# 最后一个参数可用替换你的classPackage
subprocess.run(['java', '-cp', r"D:\xx\xx\wjctest\wjctest.jar", "com.*.*.api.util.CryptUtil"])
Barry250 回复

公钥私钥都是 256 位的字符,删掉了好多

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册