2016-03-28 74 views
-1

我在運行在遠程Linux機器上的Tomcat 7實例上部署了一個war文件,我得到FileNotFoundExceptions。(Tomcat 7)部署的jar沒有找到文件

項目中引用的一個jar文件包含我沒有編寫的代碼,它使用了幾個文件(我已經包含了這些文件,但它沒有找到)。這些文件位於classes文件夾中。看來我爲這個項目設置的類路徑被這個jar忽略了。它使用的這些文件,例如.properties文件在jar外部。

這裏是它是如何調用該文件的一個例子:

FileOutputStream fos = new FileOutputStream("Key.ser"); 

開發在Eclipse開源項目時,我得到這些錯誤。我能夠通過運行配置 - >參數 - >其他來配置項目以告訴它在哪裏找到這些文件,但是導出的.war文件似乎沒有與它捆綁在一起,只有源項目纔有。現在,當我嘗試通過war文件將應用程序部署到另一臺服務器上的Tomcat時,我再次看到它們。

如何在部署的Tomcat 7 Web應用程序中配置部署的jar文件以查找該jar使用的這些文件?我不喜歡改變代碼,因爲我沒有寫它,所以我真的希望避免這種情況。

我能夠得到這個工作在本地Tomcat 7上運行的Eclipse實例與Eclipse集成,如前所述,所以我想知道如果也許這可以重複?

回答

2

您將無法通過使用FileOutputStream來簡單引用文件名來找到該文件。您將文件放在'WEB-INF/classes'目錄中是正確的,這將允許它位於類路徑中。

要加載的文件,你需要使用類似這樣的東西給它加載的類路徑資源:

String classpathLocation = ""Key.ser""; 
URL classpathResource = Thread.currentThread().getContextClassLoader().getResource(classpathLocation); 

// Or if you want it as an inputstream: 
InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream(classpathLocation); 
+0

所以,它聽起來就像我會需要更改代碼畢竟,darnit。我很好奇,jar設置的工作目錄是什麼?也許我可以在那裏硬鏈接文件或其他東西? – Wes

+0

將Tomcat作爲進程或服務運行時,工作目錄默認爲Tomcat的安裝/ bin目錄,其中Tomcat7.exe或任何版本通常從其啓動。如果你的意思是,提取罐子的工作目錄是什麼,它可以被配置。查看[tomcat文檔](https://tomcat.apache.org/tomcat-7.0-doc/config/host.html)搜索'workDir'以獲取更多信息。 – pczeus