是否有一個ClassLoader實現我可以用來從InputStream中加載類?作爲InputStream從JAR加載?
我想加載一個我有一個InputStream到一個新的ClassLoader的JAR。
是否有一個ClassLoader實現我可以用來從InputStream中加載類?作爲InputStream從JAR加載?
我想加載一個我有一個InputStream到一個新的ClassLoader的JAR。
這是不太可能的,你會發現如果你嘗試自己做。您將無法隨機訪問InputStream
以根據請求查找類,因此您必須將內容緩存在內存或文件系統中。
如果您在磁盤上緩存,只需使用URLClassLoader即可。
如果你在內存中緩存,你需要創建一些Map
與JarInputStream然後擴展ClassLoader
(覆蓋適當的方法)。這種方法的缺點是不必要地將數據保存在RAM中。
我知道這不是真的回答你的問題關於JAR/InputStream
。 但是,以下可能是您嘗試實現的替代解決方案。 這裏有一些代碼會將URL添加到classpath中。
您可以將java.io.File
轉換爲URL
作爲 f.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();
}
}