Просто перефразирую вопрос, чтобы убедиться, что я правильно его понимаю;
Вы хотите иметь возможность загрузить произвольный файл JAR на сервер, а затем использовать содержащиеся в JVM классы / ресурсы? Без перезапуска JVM и / или редактирования вашей конфигурации курса.
Если это так, то вам следует загрузить jar в загрузчик классов (при необходимости, цепочку вашего текущего загрузчика классов), а затем загрузить класс оттуда.
Предполагая, что вы храните jar-файл физически на сервере, вы можете, например, сделать что-то вроде:
public static Class<?> loadClass(String className, String jarFileLocation)
throws MalformedURLException, ClassNotFoundException {
URL jarUrl = new File(jarFileLocation).toURI().toURL();
ClassLoader classLoader = new URLClassLoader(new URL[] {jarUrl }, MyClass.class.getClassLoader());
return classLoader.loadClass(className);
}
public static Object executeMethodOndClass(String methodName, Class<?>[] parameterTypes,
Object[] parameters, String className, String jarFileLocation)
throws MalformedURLException, ClassNotFoundException, IllegalAccessException, InstantiationException,
NoSuchMethodException, InvocationTargetException {
Class<?> loadedClass = loadClass(className, jarFileLocation);
Method method = loadedClass.getMethod(methodName, parameterTypes);
Object instance = loadedClass.newInstance();
return method.invoke(instance, parameters);
}
Ps. это грубый код, я даже не компилировал и не тестировал его; это должно работать, но не более того, и есть шанс, что я что-то упустил или сделал опечатку; -)
Pps. разрешение загрузки пользовательских jar-файлов и выполнение классов из них сопряжено с рядом рисков для безопасности.