2011-01-26 71 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之前添加目录。肯定是工作