0

所以我的 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")应该可以工作,但无论我做什么,我都会得到空值。有什么建议么?

4

5 回答 5

0

不要使用ClassLoader该类,因为您可能选择了错误的类加载器(令人困惑,对吧?!)。而是使用my.package.name.MyClass.class.getResourceAsStream("/META-INF/maven/my.package.name/myApp/pom.xml")));,这样您可以确保两个文件(类和 pom.xml)可用于同一个类加载器,因为它们位于同一个存档中。

于 2013-10-21T17:50:02.707 回答
0

要加载资源,您必须提供完整路径,而不仅仅是文件名。例如/maven/mypackage/myapp/pom.xml 尝试打开存储。

于 2013-10-21T17:08:46.387 回答
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.

于 2013-10-21T17:10:04.767 回答
0

我这样做是为了把它作为一个字符串(在一个名为 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)

于 2013-10-21T19:09:23.950 回答
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 "";
    }
}
于 2015-08-26T15:04:19.527 回答