Java从jar中读取一个文件,该文件位于war的lib文件夹中

时间:2014-08-14 12:20:05

标签: java xml spring tomcat jar

我有Spring应用程序,我试图从jar中读取xml文件,该文件位于我的构建应用程序的lib文件夹中,即/WEB-INF/lib/abc.jar。

现在我正在使用此代码。

InputStream reader = SomeClassInabcJars.class
                          .getResourceAsStream("/META-INF/spring/beans.xml");

在此之后我使用DOM解析器从中获取所有bean标记。

如果我使用命令mvn tomcat:run部署此应用程序,我将获得正确的beans.xml。但是如果我在tomcat中手动部署这个应用程序的war,那么看起来beans.xml中有一些新的bean标签,并且缺少一些bean标签。

如果我提取这个战争并打开abc.jar的beans.xml,看起来是正确的。我认为这个beans.xml在运行时会发生变化。

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案来读取jar中的任何文件,该文件位于构建应用程序war文件的lib文件夹中,它对我有用。

InputStream reader = null;
for (URL url : ((URLClassLoader) (Thread.currentThread()
        .getContextClassLoader())).getURLs()) {
    if (url.getPath().contains("notification-engine")) {
        String inputFile = "jar:file:" + url.getPath()
                + "!/META-INF/spring/beans.xml";
        URL inputURL = null;
        try {
            inputURL = new URL(inputFile);
            JarURLConnection conn = (JarURLConnection) inputURL
                    .openConnection();
            reader = conn.getInputStream();
        } catch (MalformedURLException e1) {
            System.err.println("Malformed input URL: " + inputURL);
        } catch (IOException e1) {
            System.err.println("IO error open connection");
        }
        break;
    }

}

它从路径(它的jar路径)读取/META-INF/spring/beans.xml文件包含通知引擎。