我有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在运行时会发生变化。
答案 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文件包含通知引擎。