2011-08-09 117 views
1

我已經將一個文件放在我的grails-app/conf包中,名爲size_config.xml。在構建戰爭後,解壓縮文件將顯示在WEB-INF /類中,並帶有預期的名稱。但是,當我嘗試在我的應用程序中引用該文件時,它聲稱找不到該文件。我嘗試了所有我認爲合乎邏輯的組合,其中包括:無法在類路徑上找到文件grails war/tomcat

new File("WEB-INF/classes/size_config.xml") 
new File("classes/size_config.xml") 
new File("size_config.xml") 
new File("grails-app/conf/size_config.xml") 

並且這些都不起作用。當我運行我的本地集成測試時,我使用「grails-app/conf/size_config.xml」,它發現文件很好。由於該文件正在打包,我假設它不是一個部署配置問題,而是一些我未能看到的小項目。想法?

回答

3

嘗試了這一點:

def servletContext = org.codehaus.groovy.grails.web.context.ServletContextHolder.servletContext 
def file = servletContext.getResource("/WEB-INF/classes/size_config.xml") 
+0

嘗試一下當下。仍然在本地工作,所以絕對沒有傷害任何東西......只是等待構建和部署。 – Joseph

+0

@約瑟夫如果第一個不工作。嘗試第二個。並讓我知道!那麼我會編輯我的答案! –

+0

第二種解決方案奏效。非常感謝你。你爲我節省了更多時間嘗試隨機解決方案! – Joseph

0

你試圖把classpath中資源使用File同時這是不是從應用程序內部控制的默認工作目錄依託本地磁盤文件系統的路徑。這個不對。您需要將其作爲類路徑資源獲取。默認情況下,類路徑覆蓋了/WEB-INF/classes。所以你只需要從類路徑中獲得"size_config.xml"

ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
InputStream sizeConfig = classLoader.getResourceAsStream("size_config.xml"); 
// ... 
+0

如果是這種情況,上述不起作用將表明安裝問題?我只是在服務器上檢查了本地和外部的數據,size_config.xml位於/ WEB-INF/classes下。有關什麼會導致它不能正確加載到類路徑的想法? – Joseph

+1

我注意到我的例子中有一個錯字。它應該在文件名中使用'_'而不是'-'。我會解決這個問題,但是你是否考慮過這個問題?順便說一下,資源不會「加載到」類路徑中。 「classpath」只是本地磁盤文件系統路徑的集合,JVM應掃描由類加載器加載的文件。 – BalusC

+0

亞瑟的第二個例子在一些打擊之後做了詭計。 – Joseph

相關問題