无法从webapp读取pom.xml文件

时间:2013-10-21 17:06:06

标签: java spring maven

所以我的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")中找到它,但无论我做什么,我都会无效。有什么建议吗?

5 个答案:

答案 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 "";
    }
}