eclipse - Spring 3 应用程序中 Eclipse、Tomcat 和 JUnit 之间的类路径问题

标签 eclipse spring tomcat

我有一个基于 Spring 3.0.3 的 Web 应用程序,我一直在使用 Eclipse 3.4 开发它。在这样做的同时,我一直在 Eclipse 的 Tomcat 6.0.18 中运行 Web 应用程序。也就是说,我让 Eclipse 使用 Tomcat 安装,这意味着 Tomcat 将根据需要修改文件等(至少,这是我对它正在做的事情的理解)。

我的问题是在 web.xml 中指定 contextConfigLocations 的值。当从 Eclipse 中运行时,这工作正常:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath:applicationContext.xml
        classpath:applicationContext-security.xml
    </param-value>
</context-param>

但是,当我将应用程序打包成一个war 文件(ROOT.war),然后将其添加到Tomcat 的webapp 目录并尝试启动Tomcat 时,我得到一个错误,说这两个applicationContext 文件都找不到。但是当我将其更改为以下时,Tomcat 可以找到这些文件:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/config/applicationContext.xml
        /WEB-INF/config/applicationContext-security.xml
    </param-value>
</context-param>

我应该注意到 applicationContext.xml 包括其他也使用 classpath: 简写的 applicationContext 文件。在 Tomcat 中运行时,我需要放弃所有对类路径的使用:转而使用相对路径让 Tomcat 看到这些文件。

太棒了。 Tomcat 和 Eclise 相处得很好。但是 JUnit 4.7 不再开心了。无论出于何种原因,除非使用 classpath: 简写,否则无法找到在测试类中使用 @ContextConfiguration 指定的文件。这是一个例子:

@ContextConfiguration(locations = {"classpath:applicationContext.xml", "classpath:applicationContext-security.xml"})
public class UserDaoTest extends AbstractTransactionalJUnit4SpringContextTests {

    @Test
    public void testCreateUser() {
    }

所以找到applicationContext.xml和applicationContext-security.xml没有问题;但是,找不到在 applicationContext.xml 中指定的属性文件。

<bean id="appProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="singleton" value="true" />
    <property name="ignoreResourceNotFound" value="true" />
    <property name="locations">
            <list>
                    <value>/WEB-INF/config/spring/base.spring-config.properties</value>
                    <value>/WEB-INF/config/spring/local.spring-config.properties</value>
            </list>
    </property>
</bean>

但是如果我使用类路径指定这些文件的位置:简写,属性文件就会被找到。但是,如果我这样做,从 Tomcat 中的 war 文件运行时将找不到这些文件。

现在我已经创建了一个 applicationContext-test.xml,它是所有其他 applicationContext 文件的剪切和粘贴集合,其中我使用 classpath: 简写。这看起来很老套而且容易出错,我想知道所有这些技术可能存在什么问题。

欢迎反馈!

最佳答案

web.xml 内容应该是这样的

    <context-param>
    <description>
                 Spring Context Configuration.
            </description>
    <param-name>contextConfigLocation</param-name>
    <!-- spring loads all -->
    <param-value>
                classpath*:spring/*.xml,
                classpath*:spring/persistence/*.xml,
                classpath*:spring/webapp/*.xml</param-value>
    </context-param>

参见 http://static.springsource.org/spring/docs/2.5.x/reference/resources.html#resources-app-ctx-wildcards-in-resource-paths进一步引用

junit 配置应该遵循与类路径相同的约定*:

但要注意 spring 可能会加载您不希望它执行的 .xml 上下文文件

关于eclipse - Spring 3 应用程序中 Eclipse、Tomcat 和 JUnit 之间的类路径问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4179767/

相关文章:

java - 插件依赖项有一个包,我收到 "type <type> cannot be resolved"错误

java - 使用 Maven 在 SpringMVC 上出现错误 404

java - 带有嵌入式 tomcat 的 Spring Boot 在一个端口上运行,但它不起作用

tomcat - 如何在tomcat上部署Apache Nutch -1.6?

Eclipse 中的 Android SDK DDMS 无法识别我的 Android 手机

java - 找不到资源...可以在 eclipse 中运行,但不能从 jar 中运行

java - Eclipse 跳转到 Ctrl-S 上的函数名称

java - 带有 Spring Boot 的 Docker 和 Eureka 无法注册客户端

javascript - Thymeleaf 值发送 angularJS ng-onclick 方法

tomcat - Log4j2 与 tomcat、通用和 webapp 类加载器