Java从war的lib文件夹中的jar中读取一个文件
我有一个Spring应用程序,我试图从jar中读取xml文件,jar位于构建应用程序war的lib文件夹中,即/WEB-INF/lib/abc.jar 现在我正在使用这个代码Java从war的lib文件夹中的jar中读取一个文件,java,xml,spring,tomcat,jar,Java,Xml,Spring,Tomcat,Jar,我有一个Spring应用程序,我试图从jar中读取xml文件,jar位于构建应用程序war的lib文件夹中,即/WEB-INF/lib/abc.jar 现在我正在使用这个代码 InputStream reader = SomeClassInabcJars.class .getResourceAsStream("/META-INF/spring/beans.xml"); 在此之后,我将使用DOM解析器从中获取所有bean标记 如果我使用命令mv
InputStream reader = SomeClassInabcJars.class
.getResourceAsStream("/META-INF/spring/beans.xml");
在此之后,我将使用DOM解析器从中获取所有bean标记
如果我使用命令mvntomcat:run部署这个应用程序,我将得到正确的beans.xml。但若我在tomcat中手动部署这个应用程序的war,那个么beans.xml中似乎有一些新的bean标记,并且其中缺少一些bean标记
如果我提取这场战争并打开abc.jar的beans.xml,它似乎是正确的。我认为beans.xml在运行时会发生变化 我找到了一个解决方案,可以从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文件。可能是它正在使用不同的jar,而tomcat的类路径在同一路径上有bean.xml。大多数SpringJAR都有相同路径的bean.xml。首先尝试设置web inf库的类路径