所以我的tomcat webapps目录如下所示:
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 config),我试图获取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")
中找到它,但无论我做什么,我都会无效。有什么建议吗?
答案 0 :(得分:0)
要加载资源,您必须提供完整路径,而不仅仅是文件名。例如/maven/mypackage/myapp/pom.xml
尝试打开藏匿处。
答案 1 :(得分:0)
将代码更改为:
@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
。
答案 2 :(得分:0)
不要使用ClassLoader
类,因为你可能选错了类加载器(令人困惑,对吧?!)。
而是使用my.package.name.MyClass.class.getResourceAsStream("/META-INF/maven/my.package.name/myApp/pom.xml")));
,这样就可以确保两个文件(类和pom.xml)都可以使用相同的类加载器,因为它们位于同一个存档中。
答案 3 :(得分:0)
我这样做是为了将它作为一个String(在一个名为ServerResource.java的类中,所以交换你的类名):
InputStream is = ServerResource.class.getResourceAsStream("/META-INF/maven/org.buffalo/platform/pom.xml");
String pom = getStringFromInputStream(is);
如果你提取war / jar,你可以确认pom的路径(对我而言,它是META-INF / maven / org.buffalo / platform_ws / pom.xml)
答案 4 :(得分:0)
Class::getResourceAsStream
从类路径加载资源;在Web应用程序中,这意味着WEB-INF / classes中的文件,或WEB-INF / lib中的一个JAR文件内的文件。您的POM文件不在任何一个位置,因此它不在类路径中。
相反,在WAR根目录下的某个地方,它是一个Web资源,而不是一个类路径资源。您可以使用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 "";
}
}