2016-11-18 54 views
0

我無法讓Spring從我的類路徑中讀取applicationContext.xml文件。如何在類路徑中指定資源

appContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); 

appContext = new ClassPathXmlApplicationContext("applicationContext.xml"); 

原因下面的錯誤。

Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [applicationContext.xml]; nested exception is java.io.FileNotFoundException: class path resource 
[applicationContext.xml] cannot be opened because it does not exist 
at 
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341) 
at 
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) 

以下代碼正確列出了我的classpath上的所有jar文件,包括帶有applicationContext文件的jar文件。

ClassLoader cl = ClassLoader.getSystemClassLoader(); 
URL[] urls = ((URLClassLoader)cl).getURLs(); 
for(URL url: urls){System.out.println(url.getFile());} 

其中一個罐子都有一個包含我的「的applicationContext.xml」文件資源文件夾。我用7-Zip打開了jar文件,確保它在那裏。

我添加了一些代碼,試圖查看列出我的jar文件的類加載器是否可以找到它。

URL appContextURL=cl.getResource("applicationContext.xml"); 
if(appContextLocation==null){ 
    logger.info("context not found in classpath"); 
}else{ 
    logger.info("Application context found at " + appContextLocation); 
} 

這也找不到它。

我該怎麼做才能確保找到applicationContext.xml?

+0

你把你的applicationContext.xml放在哪裏? – kuhajeyan

+0

您正在使用哪種IDE? –

+1

如果它有一個'resources'文件夾,那麼你的路徑應該是'/ resources/applicationContext.xml',你現在將會從classpath的根目錄下載它。 –

回答

0

答案是解決相對路徑以包含文件夾M. Deinum建議。

appContext = new ClassPathXmlApplicationContext("classpath:resources/applicationContext.xml"); 

,並在調試

URL appContextURL=cl.getResource("applicationContext.xml"); 

這種需求並沒有出現在任何的,我發現上線使我推測,這種結構是在Eclipse和Maven使用默認值的結果的例子同時建立罐子。

感謝大家提出的很好的問題和建議。