2012-02-15 43 views
1

裏面我的.ear文件在EAR包裝沒有發現

-META-INF 
-lib 
-ejb-shared.jar 
-ejb.jar 
    -com/ejb/... (classes) 
    -fileXml.xml (file I'm trying to access) 
-web.war 

一些介紹:

  • 「ejbshared」 包含一些EJB和JPA實體
  • 「EJB」 包含一些EJB和JPA實體並使用「ejb-shared」項目

問題是我無法訪問fileXml.xml。中的EJB豆(中ejb.jar)我做:

File f = new File("fileXml.xml"); 
System.out.println(f.exists()); // returns false! 

我不知道爲什麼,但似乎fileXml.xml是不是在classpath中,althougth它存在於的.ear,或者我正在以錯誤的方式做事!

回答

2

使用new File("fileXml.xml")將引用應用程序服務器JVM的當前工作目錄中的文件,而不是相對於您的特定應用程序。嘗試使用:

URL url = getClass().getResource("/fileXml.xml"); 
boolean exists = url != null; 
System.out.println(exists); 
InputStream input = url.openStream(); 
// ... read and close input stream 
+0

如何獲取該文件的文件路徑?我使用一個需要它的庫。謝謝 – joaosavio 2012-02-16 12:30:12

+0

JAR文件的文件路徑?沒有可移植的方式來做到這一點。您可以嘗試檢查URL的協議並提取內部文件URL,然後將其轉換爲URI,然後將其轉換爲文件。或者,您可以檢查url.openConnection是否是JarURLConnection的實例,然後使用conn.getJarFile()。getName()。儘管如此,所有這些都無法保證。 – 2012-02-16 13:51:13