Я пытаюсь запустить jar-файл приложения Springboot, используя C ++ jni lib, используя следующий код:
void init_jni() {
const int kNumOptions = 1;
JavaVMOption options[kNumOptions] = {
{const_cast<char *>("-Djava.class.path=app-0.0.1-SNAPSHOT.jar"), nullptr},
};
JavaVMInitArgs vmArgs = {
JNI_VERSION_1_8, kNumOptions, options, JNI_TRUE
};
// Create the JVM
JavaVM *javaVM;
JNIEnv *jniEnv;
long flag = JNI_CreateJavaVM(&javaVM, (void **) &jniEnv, &vmArgs);
if (flag == JNI_ERR) {
cout << "Error creating VM. Exiting...\n";
exit(1);
}
jclass jcls = jniEnv->FindClass("org/springframework/boot/loader/JarLauncher");
if (jcls == nullptr) {
jniEnv->ExceptionDescribe();
javaVM->DestroyJavaVM();
exit(1);
}
jmethodID methodId = jniEnv->GetStaticMethodID(jcls, "main", "([Ljava/lang/String;)V");
if (methodId == nullptr) {
jniEnv->ExceptionDescribe();
javaVM->DestroyJavaVM();
exit(1);
}
jniEnv->CallStaticVoidMethod(jcls, methodId);
if (jniEnv->ExceptionCheck()) {
jniEnv->ExceptionDescribe();
jniEnv->ExceptionClear();
}
javaVM->DestroyJavaVM();
}
Я получаю исключение java.lang.CloneNotSupportedException при вызове метода init_jni
выше.Запуск java -jar app-0.0.1-SNAPSHOT.jar
работает нормально через терминал.Есть ли что-нибудь еще, что я должен сделать?
Вот исключение:
Exception in thread "main" java.lang.CloneNotSupportedException: java.lang.Class
at java.lang.Object.clone(Native Method)
at org.springframework.boot.loader.MainMethodRunner.<init>(MainMethodRunner.java:41)
at org.springframework.boot.loader.Launcher.createMainMethodRunner(Launcher.java:99)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)