Ниже приводится мое использование инструмента JNI in go, чтобы вызвать пакет Java Jar, ниже приведены программы кода Java и GO, а также ошибку времени выполнения.package com.example.demo;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.digest.HMac;
public class MyTest {
public static String test(String secretKey){
HMac mac = SecureUtil.hmacSha256(secretKey);
String digestHex = mac.digestHex("spliceValue", CharsetUtil.CHARSET_UTF_8);
String signature = digestHex.toUpperCase();
return signature;
}
}
< /code>
Go Code: < /p>
package main
/*
#include
*/
import "C"
import (
"fmt"
"github.com/timob/jnigi"
"log"
"runtime"
)
func main() {
fmt.Println("load JVM...")
jvmPath := jnigi.AttemptToFindJVMLibPath()
fmt.Printf("JVM path: %s\n", jvmPath)
if err := jnigi.LoadJVMLib(jvmPath); err != nil {
log.Fatal("JVM load err:", err)
}
fmt.Println("JVM load success!")
runtime.LockOSThread()
defer runtime.UnlockOSThread()
classpath := "/test/app/engine-test/demo.jar:/test/app/engine-test/hutool-all-5.8.25.jar:/test/app/engine-test/bcprov-jdk18on-1.78.jar"
fmt.Printf("Classpath: %s\n", classpath)
jvmArgs := jnigi.NewJVMInitArgs(false, false, jnigi.DEFAULT_VERSION,
[]string{
"-Djava.class.path=" + classpath,
"-Xmx512m",
"-Xms256m",
})
jvm, env, err := jnigi.CreateJVM(jvmArgs)
if err != nil {
log.Fatal("err:", err)
}
fmt.Println("JVM success!")
defer jvm.Destroy()
secretKey := "mySecretKey123"
secretKeyParam, err := env.NewObject("java/lang/String", []byte(secretKey))
if err != nil {
log.Fatal("secretKe err:", err)
}
class, err := env.FindClass("com/example/demo/MyTest")
if err != nil {
fmt.Printf(" ------FindClass: %v\n", err)
}
var tt jnigi.ObjectRef
err = class.CallMethod(env, "test", &tt, secretKeyParam)
if err != nil {
fmt.Printf(" ------class.CallMethod: %v\n", err)
}
var goString string
if err := tt.CallMethod(env, "toString", &goString); err != nil {
fmt.Printf(" ewrr: %v\n", err)
} else {
fmt.Printf(" return: %s\n", goString)
}
}
< /code>
Запустите эту демонстрацию : < /p>
f205b1f5592f:/test/app/engine-test# ./main
load JVM...
JVM path: /opt/java/openjdk/lib/server/libjvm.so
JVM load success!
Classpath: /test/app/engine-test/demo.jar:/test/app/engine-test/hutool-all-5.8.25.jar:/test/app/engine-test/bcprov-jdk18on-1.78.jar
JVM success!
Exception in thread "main" java.lang.NoSuchMethodError: test
------class.CallMethod: Java exception occurred. check stderr/logcat
ewrr: JNIGI: unknown type *string (value = 0xc000014060)
Подробнее здесь: https://stackoverflow.com/questions/797 ... ar-package