只是改写问题以确保我正确;
您希望能够将任意 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);
}
附言。这是粗略的代码,我什至没有编译或测试它;它应该工作,但仅此而已,而且我有可能忽略了某些东西或打错了;-)
pps。允许上传自定义 jar 文件并执行其中的类确实会带来许多(安全)风险。