2012-03-28 42 views
1

我正在使用共享庫作爲我的Java EE項目的依賴項。 War文件正在部署到Tomcat。戰爭依賴在類路徑中查找文件

共享庫依賴於在類路徑中找到的文件。有沒有辦法保證文件將在類路徑中?我無法在共享庫中硬編碼文件的路徑。我也不能避免使用需要它的類。

回答

0

您的戰爭中的WEB-INF/classes中的任何內容都在'classpath'中(假設它是通過使用您的webapp的URLClassLoader加載的類來搜索的)。

您可以在包裝過程中將您的文件複製到那裏嗎?

1

包裝你的戰爭

最簡單的辦法是,如果你能包你部署的WAR文件中所有依賴JAR文件和類。然後,您可以控制它們如何從指定的類路徑加載。

正如BGR提到的所有的編譯的Java scource(* .class文件)應該在你的WAR文件中可用的web-inf\classes目錄

下的任何支持JAR文件應該是你的WAR文件中的web-inf\lib目錄下進行。

Tomcat知道這些目錄結構,因爲它是WAR文件的行業標準格式。

你當然可以偏離這個標準結構並從WAR的其他地方加載JAR文件,但是你必須瞭解潛在的類加載問題。我所提到的是最簡單的前進方式。

文件是否存在於類路徑中?

在您的應用程序中,您可以執行類似的操作來檢查類路徑中是否存在特定的文件。

URL resource = this.getClass().getClassLoader().getResource(path);

下面是從Oracle一些額外的閱讀Location-Independent Access to Resources

1

如果共享庫(例如lib1內)是你的 - 那麼你可以打包必要的文件到它的罐子。 jar的根文件夾是classpath的根。

如果lib1是第三方,您可以在jar中使用此文件創建lib1-res庫。總是一起使用這些庫(在使用maven的情況下,使lib1-res依賴於lib1)。