2011-09-23 37 views

回答

-4
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()); 
     } 

    } 

} 

}

+0

虽然这并没有真正解决这个问题。这也不会加载一个jar文件 - 它只是查看它的条目。 –

1

如果你看一下JarClassLoader in the Java tutorial的代码,将让你开始。

如果您是Google for Jar Class Loader,还有其他可用资源。
您将需要修改代码以传递您从数据库中的BLOB获取的ByteStream。

2

编写自己的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进行一些小的修改。不过,仔细看看,看看你能从中得到什么。

0

实现你自己的类加载器是明显的答案。取决于你如何使用可能存在问题的类。另一个鲜为人知的选项是实现自己的url处理程序。你可以想出一个自定义的网址方案,如"db://<dbname>/<tablename>/<jarfile>"或其他。你会实现一个自定义的URLStreamHandler,详细信息here