无法在pom.xml文件从Web应用程序读取
所以我的tomcat的webapps目录下是这样的:无法在pom.xml文件从Web应用程序读取
C:/tomcat/webapps/myApp/
myApp/
resources/...
META-INF/
MANIFEST.MF
maven/
my.package.name/
myApp/
pom.properties
pom.xml
WEB-INF/
classes/...
lib/...
web.xml
我有一个AppConfig.java(Java Spring配置),我想获得的POM。 XML文件,所以我可以从中得到某些东西。我已经尝试了很多东西,但在获取文件方面没有成功。我有一个bean,我刚刚已经把一个断点,并尝试不同的东西来获取文件。
@Bean
public String clientVersion()
{
BufferedReader reader = new BufferedReader(new InputStreamReader(ClassLoader.class.getResourceAsStream("/pom.xml")));
return "";
}
我曾尝试ClassLoader.class.getResourceAsStream()
与许多不同的路径,虽然从我已经能够在其他帖子和论坛上找到ClassLoader.class.getResourceAsStream("META-INF/maven/my.package.name/myApp/pom.xml")
应该工作,但我得到空不管我做什么。有什么建议么?
要加载资源,您必须提供完整路径,而不仅仅是文件名。例如/maven/mypackage/myapp/pom.xml
尝试打开藏匿处。
我尝试了这个建议,它没有工作。我在另一个SO中读到,ClassLoader并不关心主导斜线。我无法找到更早的地方。 –
更改代码:
@Bean
public String clientVersion()
{
BufferedReader reader = new BufferedReader(new InputStreamReader(ClassLoader.class.getResourceAsStream("/META-INF/maven/my.package.name/myApp/pom.xml")));
return "";
}
取决于它是如何存储你的文件系统,该my.package.name
可能需要实际上是my/package/name
。
实际的目录名是带点的,而不是斜杠,但我仍然尝试过,它没有工作。 –
也许这就是问题所在? – Antoniossss
尝试在'/ WEB-INF/classes'下放置'/ META-INF/** ... ... – carlspring
请不要使用ClassLoader
类,因为您可能拾取了错误的类加载器(令人困惑,对吧?!)。 取而代之的是使用my.package.name.MyClass.class.getResourceAsStream("/META-INF/maven/my.package.name/myApp/pom.xml")));
,这样就可以确保两个文件(类和pom.xml)对于同一个类加载器都可用,因为它们在同一个存档中。
我这样做是为了把它作为一个String(被称为ServerResource.java类,所以换入你的类名内):
InputStream is = ServerResource.class.getResourceAsStream("/META-INF/maven/org.buffalo/platform/pom.xml");
String pom = getStringFromInputStream(is);
,如果你提取你的战争/罐,可以确认的路径(对我来说,它是META-INF/maven/org.buffalo/platform_ws/pom.xml)
Class::getResourceAsStream
从类路径加载资源;在Web应用程序中,这意味着在WEB-INF/classes内的文件,或者在WEB-INF/lib内部的JAR文件之一内。你的POM文件不在这些地方,所以它不在类路径中。
确切地说,在WAR根目录下的某个地方,它是一个web资源,而不是一个classpath资源。您可以使用ServletContext::getResourceAsStream
加载网络资源。
您的代码应该是这样的:
@Bean
public String clientVersion(ServletContext servletContext) throws IOException {
String pomPath = "/META-INF/maven/my.package.name/myApp/pom.xml";
try (InputStream pomStream = servletContext.getResourceAsStream(pomPath)) {
BufferedReader reader = new BufferedReader(new InputStreamReader(pomStream));
return "";
}
}
尝试了这一点 - META-INF/maven的/我/包/对myApp/pom.xml的。请删除您的目录名称中的小圆点和正斜杠 – Keerthivasan