2013-10-21 34 views
0

所以我的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")應該工作,但我得到空不管我做什麼。有什麼建議麼?

+0

嘗試了這一點 - META-INF/maven的/我/包/對myApp/pom.xml的。請刪除您的目錄名稱中的小圓點和正斜槓 – Keerthivasan

回答

0

要加載資源,您必須提供完整路徑,而不僅僅是文件名。例如/maven/mypackage/myapp/pom.xml 嘗試打開藏匿處。

+0

我嘗試了這個建議,它沒有工作。我在另一個SO中讀到,ClassLoader並不關心主導斜線。我無法找到更早的地方。 –

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

+0

實際的目錄名是帶點的,而不是斜槓,但我仍然嘗試過,它沒有工作。 –

+0

也許這就是問題所在? – Antoniossss

+0

嘗試在'/ WEB-INF/classes'下放置'/ META-INF/** ... ... – carlspring

0

請不要使用ClassLoader類,因爲您可能拾取了錯誤的類加載器(令人困惑,對吧?!)。 取而代之的是使用my.package.name.MyClass.class.getResourceAsStream("/META-INF/maven/my.package.name/myApp/pom.xml")));,這樣就可以確保兩個文件(類和pom.xml)對於同一個類加載器都可用,因爲它們在同一個存檔中。

0

我這樣做是爲了把它作爲一個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)

0

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 ""; 
    } 
} 
相關問題