如何确保类加载器可以访问临时jar文件

时间:2012-03-20 13:36:26

标签: java jar classloader

我有一个自定义jar类加载器,它使用URLCLassLoader。我必须从数据库中读取jar内容并加载它们。有几个与此相关的问题。

  1. 我可以以某种方式从字节流中加载所有类,而不是先将jar内容从数据库保存到临时文件,并将file:// URL提供给URL类加载器吗?

    < / LI>
  2. 如果上述问题的答案是肯定的,那么类加载器会确保它一次从字节流中读取所有类文件和资源,以避免以后出现ClassNotFoundError。

  3. 如果答案是Q1。没有。然后按照我的方法,我从数据库字节流中创建了一个临时 .jar,并将文件:// URL提供给URLClassloader。 URLClassloader是否确保该URL上的文件是临时的,在被使用之前不会被销毁,以避免ClassNotFoundException?

  4. 对上述整体问题的任何其他解决方案也是受欢迎的。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用自己的URL构建URLStreamHandler。但是,URLClassLoader的正常实施会将内容保存到临时文件并使用JarFile API。

如果创建临时文件,则在UNIX系统上应该能够在打开后删除。在Windows上,您需要保留它,直到您完成类加载器。从Java SE 7开始,您可以关闭URLClassLoader