java dynamically adds external jar packages to the classpath

          In the process of project development, we sometimes need to dynamically add external jar packages, but the specific business requirements have not yet been encountered, because if we dynamically add external jar packages, we need to modify the business code, and modifying the code requires restarting Service, then it seems that there is no need to dynamically add external jar packages. How can I use the latest code without restarting the server? I have not found a way. If you know, please give me some suggestions, return to the theme, and realize dynamic addition of external jar packages. The method to the classpath is as follows:

String beanClassName = "com.dynamic.DynamicBean3";
Map<String,Class<?>> classMap = new HashMap<String,Class<?>>();
String filePath = "f:\\testDynamicBean-1.0-SNAPSHOT.jar";
String uFilePath = "file:f:\\testDynamicBean-1.0-SNAPSHOT.jar";

URL url1 = new URL(uFilePath);
URLClassLoader urlClassLoader = new URLClassLoader(new URL[] { url1 }, Thread.currentThread()
                .getContextClassLoader());
List<JarEntry> jarEntryList = new ArrayList<>();
JarFile jarFile = new JarFile(filePath);
Enumeration<JarEntry> jarEntryEnumeration = jarFile.entries();
while (jarEntryEnumeration.hasMoreElements()){
     JarEntry jarEntry = jarEntryEnumeration.nextElement();
     if (//jarEntry.getName().startsWith(filePath) &&
           jarEntry.getName().endsWith(".class")) {
                jarEntryList.add(jarEntry);
            }
        }

      for (JarEntry entry : jarEntryList) {
           String className = entry.getName().replace('/', '.');
           className = className.substring(0, className.length() - 6);
           if(!classMap.containsKey(beanClassName)){
                Class<?> loadClass = urlClassLoader.loadClass(className);
                classMap.put(className,loadClass);
            }
        }
       try {
           Method printMethod = classMap.get(beanClassName).getMethod("printBean3");
           printMethod.invoke(classMap.get(beanClassName).newInstance());
        } catch (IllegalAccessException e) {
            e.printStackTrace ();
        } catch (InvocationTargetException e) {
            e.printStackTrace ();
        } catch (NoSuchMethodException e) {
            e.printStackTrace ();
        } catch (InstantiationException e) {
            e.printStackTrace ();
        }

 

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326969171&siteId=291194637