JNI C ++ findClass () в весеннем загрузочном банке fat / uber в папке BOOT-INF / lib / *. Jar - PullRequest
0 голосов
/ 24 марта 2020

У меня проблема с получением включенного jar для более крупного проекта, чтобы найти его собственные классы при включении в исполняемый файл jar весенней загрузки.

Следующий код работает при непосредственном запуске jar (например: java -jar module.jar).

jclass clazz = env->FindClass("com/module/Request");

Сбой при запуске в большем весеннем загрузочном фляге

app.jar
 |-> BOOT-INF
     |-> lib
         |-> module.jar //module .class files
     |-> classes //app .class files (findClass() searches here?)
 |-> META-INF
 |-> org

Как мне заставить JNI найти связанный .class файл внутри модуля .jar? Я пробовал то, что чувствует, как все возможные варианты следующего.

env->FindClass("/BOOT-INF/lib/module.jar!/com/module/Request");
env->FindClass("file:/BOOT-INF/lib/module.jar!/com/module/Request");
env->FindClass("jar:file:/BOOT-INF/lib/module.jar!/com/module/Request");
env->FindClass("/home/root/app.jar!/BOOT-INF/lib/module.jar!/com/module/Request");
env->FindClass("file:/home/root/app.jar!/BOOT-INF/lib/module.jar!/com/module/Request");
env->FindClass("jar:file:/home/root/app.jar!/BOOT-INF/lib/module.jar!/com/module/Request");
env->FindClass("/home/root/app.jar!/BOOT-INF/lib/module.jar!/com/module/Request");
env->FindClass("file:/home/root/app.jar!file:/BOOT-INF/lib/module.jar!/com/module/Request");
env->FindClass("jar:file:/home/root/app.jar!jar:file:/BOOT-INF/lib/module.jar!/com/module/Request");

Мой jvm инициализируется с

JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) {
    return JNI_VERSION_1_6;
}
...