2012-11-23 167 views
0

我得到的用於與數據源的XML配置「db2.xml」,這是該JAR的同一路徑下,如創建數據庫連接池常見的罐子:Jar中的Java類如何讀取外部XML配置文件?

Project/ 
     -- lib 
       -- db2.xml 
       -- common.jar 

下面的代碼讀取db2.xml:

private BeanFactory() { 
      try { 
       beanFactory = new DefaultListableBeanFactory(); 
       xmlReader = new XmlBeanDefinitionReader((BeanDefinitionRegistry) 
        beanFactory); 
       resource = new ClassPathResource("db2.xml"); 
       xmlReader.loadBeanDefinitions(resource); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     }  

總是發生錯誤:

org.springframework.beans.factory.BeanDefinitionStoreException: IOException 
parsing XML document from class path resource [db2.xml]; nested exception is 
java.io.FileNotFoundException: class path resource [db2.xml] cannot be opened 
because it does not exist 

所以它必須通過 'db2.xml' 造成的無法找到。是否配置文件設置爲resource = new ClassPathResource("/db2.xml")resource = new ClassPathResource("lib/db2.xml")resource = new ClassPathResource("../lib/db2.xml");我都不會工作。我如何爲此設置相對路徑。

resource = new ClassPathResource(CONFIGURATION_PATH); 

這是一個Java項目。當我將db2.xml放入常用jar時,我工作正常。

+0

在'lib'目錄中添加'db2.xml'沒有意義,仍然嘗試''classpath:lib/db2.xml「' –

+0

這是什麼意思?使用「classpath:lib/db2.xml」替換「db2.xml」作爲配置路徑? –

+0

你不能將單個文件添加到類路徑(除了罐子),你需要添加整個文件夾(如果你這樣做,我不會使用「lib」,因爲這會將所有jar文件添加兩次)。 – Thilo

回答

0

db2.xml應該在類路徑中。告訴我們你是如何運行Java應用程序的。如果你使用的是像eclipse這樣的IDE,將lib目錄添加到classpath(構建路徑)。如果您使用的是純java命令,請使用以下命令在classpath中使用lib目錄。

java -cp {path to lib directory},{what ever jars you have comma seperated} mainClass

而且在默認情況下java命令不會在類路徑當前目錄。

+0

我們通過命令行調用類,但調用此類的工作由其他人負責,所以我無法執行命令行。 –

+0

然後,您需要將此文件添加到jar文件。 Lib目錄不在classpath中,所以java不能找到它。所以你可以使用絕對路徑(查看使用System.getProperty(「user.dir」)的另一個答案)試一試。 – Subin

+0

我強烈建議聯繫其他負責人並編輯命令行命令添加類路徑條目 – Subin

0

試試這個

String userDir = System.getProperty("user.dir"); 
    File file = new File(userDir+"/lib/db2.xml"); 
+0

因爲這個jar應該可以在XP,Linux等所有類型的操作系統平臺上工作。我想這種使用絕對路徑的方法是行不通的。 –

+0

其工作目錄,請查看此鏈接[系統屬性](http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html)&你試過了嗎? – vels4j