使用Inputstream动态加载jar文件

时间:2014-02-04 15:39:35

标签: java

我的应用程序包含位于主应用程序文件夹中的插件

src
    app_package
    modules //plug in jars located here

我的问题是我无法获取jar文件因为当主应用程序转换为jar时你无法拥有文件对象。目前我正在尝试使用InputStream获取jar。有没有办法使用输入流来获取位于modules文件夹中的所有jar的URL?

更新

我使用java serviceloader来加载jar文件。首先,我将所有jar文件加载到文件对象中:

      File modules = new File("modules");
      File[] fileList = providerFiles.listFiles(new FileFilter() {
          public boolean accept(File file) {
              return file.getPath().toLowerCase().endsWith(".jar");
          }
      });

下一步是使用以下方式获取网址:

        URL[] urls = new URL[fileList.length];
        for (int i = 0; i < fileList.length; i++)
            urls[i] = fileList[i].toURI().toURL();
        ucl = new URLClassLoader(urls); 

我的问题是我意识到在访问jar文件时我应该使用getResource()。然而,我所能做的就是

       URL url = getClass().getResource(directory);
       InputStream inputStream = url.openConnection().getInputStream();

我迷失在如何使用输入流来获取所有罐子的URL。

1 个答案:

答案 0 :(得分:0)

它并不完全清楚,但听起来你在jar文件中有jar文件。那是对的吗?如果是这样,这是非常不正统的部署。

如果要列出zip / jar文件中的文件,可以使用ZipInputStream