2011-01-26 87 views
8

我在web-INF/config/applicationContext.xml中的applicationContext.xml中使用web應用程序。現在我需要將一些測試工具作爲獨立應用程序來實現,它可以使用相同的applicationContext.xml,但對ClassPathXmlApplicationContext類的配置路徑有問題。我知道,當我複製applicationContext.xml到默認包(其中.java駐留)我可以使用ClassPathXmlApplicationContext(「applicationContext.xml」),但這是必要的嗎?使用ClassPathXmlApplicationContext的applicationContext.xml的正確路徑

import org.apache.log4j.Logger; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

public class AdminTool { 

    private Logger log = Logger.getLogger(getClass()); 

    /** all below doesn't work - FileNotFoundException) **/ 
    private static final ApplicationContext ac = new ClassPathXmlApplicationContext("/WEB-INF/config/applicationContext.xml"); 
    private static final ApplicationContext ac = new ClassPathXmlApplicationContext("config/applicationContext.xml"); 
    private static final ApplicationContext ac = new ClassPathXmlApplicationContext("../config/applicationContext.xml"); 

    public static void main(String[] args) { 
     new AdminTool(); 
    } 

    public AdminTool() { 
     log.debug(ac); 
    } 

} 

回答

12

在本地測試場景中,您不在Jar內,因此您不需要基於Classpath的訪問。改爲使用FileSystemXmlApplicationContext

大概是這樣的:

private static final ApplicationContext ac = 
    new FileSystemXmlApplicationContext(
     "src/WEB-INF/config/applicationContext.xml" 
    ); 

(路徑是從執行目錄的相對)

+0

我想使用webapp.war運行我的AdminTool。是否有可能使用FileSystemXmlApplicationContext? – marioosh 2011-01-26 09:41:56

+0

@marioosh不,在一場戰爭中,你有和罐子一樣的問題:沒有文件,只有條目。戰爭部署到servlet容器還是本地? – 2011-01-26 09:53:23

1
private static final ApplicationContext ac = 
    new FileSystemXmlApplicationContext(
     "/WEB-INF/config/applicationContext.xml" 
    ); 
3

這就是爲什麼我喜歡把所有的配置文件中文件夾的原因。實際上,使用Maven,你可以把所有這些文件放在src/main/resources。然後,在您的測試文件中,您可以訪問'classpath:applicationContext.xml'。

0
private static final ApplicationContext ac = 
new FileSystemXmlApplicationContext(
    "/WEB-INF/config/applicationContext.xml" 
); 
-1

請轉到屬性> Java Build Path>項目源檢查類路徑並在類路徑中的WEB-INF之前添加目錄。肯定是工作