如何从一个存储为blob的jar文件加载类作为URL类加载器只接受URL或文件路径?Java Jar文件作为流类加载器
回答
从java.lang.ClassLoader
实现您自己的子类,它从数据库加载。
也许这篇文章可以帮助上手:http://www.javablogging.com/java-classloader-2-write-your-own-classloader/
one way to laod jar file .. it may helpful to you.
public class JarLoad {
public static void main(String[] args) throws ZipException, IOException {
File jarfile = new File("C\\scan.jar");
if(! jarfile.isDirectory()){
ZipFile jar = new ZipFile(jarfile);
Enumeration enumeration = jar.entries();
while(enumeration.hasMoreElements()){
ZipEntry zipEntry = (ZipEntry)enumeration.nextElement();
System.out.println(zipEntry.getName());
}
}
}
}
虽然这并没有真正解决这个问题。这也不会加载一个jar文件 - 它只是查看它的条目。 –
如果你看一下JarClassLoader in the Java tutorial的代码,将让你开始。
如果您是Google for Jar Class Loader,还有其他可用资源。
您将需要修改代码以传递您从数据库中的BLOB获取的ByteStream。
编写自己的ClassLoader可能会让人感到困惑,特别是对于初学者。我最近需要动态加载一些罐子,发现this answer非常有帮助。它解释了如何使用ResourceFinder,Apache xbean或类中的一个类。这是一个单独的文件,您可以轻松将其放入您的项目中。
最有利的是您的情况,虽然ResourceFinder加载由URL,该readContents
功能(用于实际加载的jar文件)看起来是这样的:
private String readContents(URL resource) throws IOException {
InputStream in = resource.openStream();
BufferedInputStream reader = null;
StringBuilder sb = new StringBuilder();
try {
reader = new BufferedInputStream(in);
int b = reader.read();
while (b != -1) {
sb.append((char) b);
b = reader.read();
}
return sb.toString().trim();
} finally {
try {
in.close();
reader.close();
} catch (Exception e) {
}
}
}
它可以很容易地修改,以在任何流工作/ blob你有。 我相信,对班级的一些小改动可以使其完成你想要的任务,或者至少让你朝着正确的方向发展。从头开始编写ClassLoaders并不好玩。
编辑: 你知道吗,我刚刚看了一遍,我不确定你只能对ResourceFinder进行一些小的修改。不过,仔细看看,看看你能从中得到什么。
实现你自己的类加载器是明显的答案。取决于你如何使用可能存在问题的类。另一个鲜为人知的选项是实现自己的url处理程序。你可以想出一个自定义的网址方案,如"db://<dbname>/<tablename>/<jarfile>"
或其他。你会实现一个自定义的URLStreamHandler,详细信息here。
- 1. Java:更新jar文件时加载类
- 2. Java从jar加载文件
- 3. 在Jar文件中加载类
- 4. 加载外部JAR文件与Java
- 5. JAX-RS - 从jar文件加载@Provider类
- 6. 无法从JAR文件加载主类
- 7. 无法在jar文件中加载类
- 8. 无法加载jar文件的主类
- 9. 作为InputStream从JAR加载?
- 10. 加载jar文件时未找到Java类
- 11. 使用Java Class和Jar文件找不到或加载主类
- 12. 如何为类加载器加载任意选择的JAR?
- 13. 是否可以为Java创建自定义类加载器,以有条件地从JAR或CLASS_PATH加载类?
- 14. Jar文件作为Java代理
- 15. Java类加载器:为什么先搜索父类加载器?
- 16. Jar文件未加载
- 17. 类加载器和与Apache Tomcat共享.jar文件
- 18. 为什么当类在我的JAR文件中时,我无法加载类?
- 19. Jar文件:在jar中加载配置文件
- 20. Java文件:加载里面放置JAR的文件夹ZIP
- 21. 如何从浏览器加载JAR文件加载库?
- 22. 类加载器资源流为'空',Spring引导微服务jar BOOT-INF
- 23. 从jar加载xslt文件加载jar本身,而不是xslt
- 24. 无法从jar文件加载文件
- 25. 无法加载资源Jar文件
- 26. Jar无法加载包含类文件的文件夹
- 27. 如何将java类添加到jar文件中的文件夹
- 28. 从外部Jar加载属性文件
- 29. 在JAR文件中加载资源
- 30. 使用class.getResource()在.jar中加载文件?
'java.security.SecureClassLoader'可能会是一个更好的基础。 –