有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

XMLJava从jar中读取文件,jar位于war的lib文件夹中

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

现在我正在使用这个代码

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

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

如果我使用命令mvntomcat:run部署这个应用程序,我会得到合适的bean。xml。但若我在tomcat中手动部署该应用程序的war,那个么bean中似乎有一些新的bean标记。xml和一些bean标记从中丢失

如果我提取这场战争并打开abc。罐子里的豆子。xml,这似乎是正确的。我想这是豆子。xml在运行时会发生变化


共 (1) 个答案

  1. # 1 楼答案

    我找到了一个解决方案,可以从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;
        }
    
    }
    

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