Настройка системного загрузчика классов для встроенной JVM

Я удивляюсь, создавая и встраивая JVM с помощью CreateJavaVM метод. Я также хочу настроить системный загрузчик classsloader для использования этим jvm. Однако мои классы находятся в памяти (полученной из сети или в зашифрованном виде), поэтому я не могу установить classpath в местоположение файловой системы. Вместо этого я думаю о настройке системного загрузчика классов на свой пользовательский загрузчик классов, а затем загрузку других файлов классов с помощью этого загрузчика классов. Однако я не смог найти способ установить системный загрузчик классов на класс, который я определил, используя DefineClass метод. Настройка загрузчика классов с помощью System.setProperty("java.system.class.loader", "org.me.CustomClassLoader") не работает после создания JVM. Есть ли способ установить системный загрузчик классов для использования в памяти загрузчик классов?

Кстати, я думал о настройке classloader в java.net.URLClassloader, но это невозможно, потому что подпись конструктора не соответствует ожидаемой JVM.

  JavaVM *jvm;
JNIEnv *env;
JavaVMInitArgs vm_args;
JavaVMOption* options = new JavaVMOption[2];
options[0].optionString = "-verbose:jni";
options[1].optionString = " -Djava.system.class.loader=org.me.CustomClassLoader";
vm_args.version = JNI_VERSION_1_6;
vm_args.nOptions = 2;
vm_args.options = options;
vm_args.ignoreUnrecognized = false;
// Create jvm
JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);

// Read classdef from network
jbyte *data = ReadClassDefinition();
*jcls =env->DefineClass("org/me/CustomClassLoader", NULL, (jbyte*)data, size);

0

Решение

Я не могу найти способ достичь этого. Я вернулся к копированию classloader class во временный jar-файл и определил путь этого jar-файла в качестве параметра classpath для JVM, используя -Djava.class.path имущество.

0

Другие решения