从JAR加载为InputStream?

是否有一个ClassLoader实现,我可以用来从InputStream加载类?

我正在尝试将具有InputStream的JAR加载到新的ClassLoader中。

这是不太可能的,因为你会发现如果你自己尝试这样做。 您将无法随机访问InputStream以在请求时查找类,因此您必须将内容缓存在内存或文件系统中。

如果您在磁盘上缓存,只需使用URLClassLoader 。

如果在内存中缓存,则需要使用JarInputStream创建某种Map ,然后扩展ClassLoader (覆盖适当的方法)。 这种方法的缺点是您不必要地将数据保存在RAM中。

我知道这不是你对JAR / InputStream问题的真正答案。 但是,以下可能是您尝试实现的替代解决方案。 以下是一些将URL添加到类路径的代码。

您可以将java.io.File转换为URLf.toURI().toURL()

 /** * Adds a URL to current classpath. * @param url url */ public static void addURL(URL u) { URLClassLoader sysloader = (URLClassLoader)ClassLoader.getSystemClassLoader(); try { Method method = URLClassLoader.class.getDeclaredMethod("addURL",parameters); method.setAccessible(true); method.invoke(sysloader,new Object[]{u}); System.out.println("Dynamically added " + u.toString() + " to classLoader"); } catch (Exception e) { e.printStackTrace(); } } 
Interesting Posts