image.png
该项目打包成ajar.jar
AbsCore.java
package package_a;
public abstract class AbsCore {
public String methodA() {
return "methodA";
}
public String methodB() {
return "methodB";
}
}
C.java
package package_a;
public class C extends AbsCore {
}
D.java
package package_a;
public class D extends AbsCore {
@Override
public String methodA() {
return "DA";
}
@Override
public String methodB() {
return "DB";
}
}
ICore.java
package package_a;
public interface ICore {
public String test();
}
AImpl.java
package package_a;
public class AImpl implements ICore {
private String name = "A";
public String test() {
return name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
BImpl.java
package package_a;
public class BImpl implements ICore {
public String test() {
return "B";
}
}
image.png
该项目打包成bjar.jar
Test.java
package package_b;
import package_a.*;
public class Test {
public static String testStatic() {// 测试静态方法
return "testStatic success.";
}
public void testVoid() {// 测试Void方法
System.out.println("testVoid success.");
}
public String testString() {// 测试返回String的方法
return "testString success.";
}
public String testString(String str) { //测试重载的方法
return str;
}
public String testICore(ICore core) { //测试传入java实例,以接口类型入参
return core.test();
}
public String testAbsCore(AbsCore core) { //测试传入java实例, 以抽象类型入参
return core.methodA();
}
public ICore testICore() { //测试返回接口类型的java实例
AImpl a = new AImpl();
a.setName("hello");
return a;
}
public AbsCore testAbsCore() { //测试返回抽象类型的java实例
D d = new D();
return d;
}
}
image.png
bjar.jar放在本目录,ajar.jar放在其他目录,模拟依赖问题。
usejar.py
# coding=utf-8
import jpype
import os
import platform
if __name__ == '__main__':
jvm_path = jpype.getDefaultJVMPath()
dependence_dirs = list()
dependence_dirs.append(os.path.join(os.path.abspath("."))) # 当前目录,所要使用的jar则放在该目录
dependence_dirs.append(r"/Users/apple/Desktop") # 被依赖的jar所在的目录,被依赖的目录可能由多个,自行append即可
if platform.system() == "Windows": #处理分隔符号
java_dirs = ";".join(dependence_dirs)
else:
java_dirs = ":".join(dependence_dirs)
jpype.startJVM(jvm_path, "-ea", "-Djava.ext.dirs=%s" % java_dirs, convertStrings=True)
AbsCore = jpype.JClass("package_a.AbsCore")
AImpl = jpype.JClass("package_a.AImpl")
BImpl = jpype.JClass("package_a.BImpl")
C = jpype.JClass("package_a.C")
D = jpype.JClass("package_a.D")
ICore = jpype.JClass("package_a.ICore")
Test = jpype.JClass("package_b.Test")
test = Test()
print Test.testStatic() # 测试静态方法
test.testVoid() # 测试Void方法
print test.testString() # 测试返回String的方法
print test.testString("aaaaaa") # 测试重载的方法
print test.testICore(AImpl()) # 测试java实例入参
print test.testICore(BImpl())
print test.testAbsCore(C()) #测试java实例入参
print test.testAbsCore(D())
print test.testICore().test() #获得java实例
print test.testAbsCore().methodB() #获得java实例
jpype.shutdownJVM()
image.png
附上java的源码,以及本人编译后的jar。
链接:https://pan.baidu.com/s/11GQ2bm_DCm-Lz98x5GSB2w 密码:0azg