【问题标题】:Location of spring-context.xmlspring-context.xml 的位置
【发布时间】:2012-05-10 06:10:13
【问题描述】:

当我在 tomcat 上运行我的应用程序时,spring-context.xml 文件位于

/WEB-inf/spring-context.xml

没关系。但是运行 junit 测试我必须向它提供我的 spring-test-context.xml 的位置,如下所示:

@ContextConfiguration(locations={"classpath:/spring-test-context.xml"})

唯一可行的方法是文件位于

/src/spring-context.xml

如何让我的应用程序在同一位置找到我的 spring-context 文件?以便它与 junit testes 一起工作并部署在 tomcat 上?

我试过这个,它给了我很多关于找不到任何 bean 的错误,但它并没有说它找不到文件..

classpath:/WEB-INF/spring-test-context.xml

【问题讨论】:

    标签: java spring junit


    【解决方案1】:

    问题是 /WEB-INF 不在 Web 应用程序的 CLASSPATH 中。但是,/WEB-INF/classes 是。

    您的测试问题是您没有在应用服务器中运行,因此默认情况下 WEB-INF/classes 不是 CLASSPATH 的一部分。我建议设置您的测试,以便 WEB-INF/classes 位于测试 CLASSPATH 中,或者使用相对或绝对文件路径来查找它们。

    【讨论】:

      【解决方案2】:

      正如 duffymo 所暗示的,Spring TestContext Framework (TCF) 假定字符串位置默认位于类路径中。有关详细信息,请参阅ContextConfiguration 的 JavaDoc。

      但是请注意,您还可以使用 Spring 的资源抽象(即,使用“file:”前缀)在文件系统中指定资源,使用绝对路径或相对路径。您可以在 Spring 的 AbstractContextLoader 中的 modifyLocations() 方法的 JavaDoc 中找到详细信息。

      例如,如果您的 XML 配置文件位于项目文件夹中的 "src/main/webapp/WEB-INF/spring-config.xml" 中,您可以将位置指定为相对文件系统路径,如下所示:

      @ContextConfiguration("file:src/main/webapp/WEB-INF/spring-config.xml")
      

      作为替代方案,您可以将 Spring 配置文件存储在类路径中(例如,src/main/resources),然后通过 Spring MVC 配置中的类路径引用它们——例如:

      <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:/spring-config.xml</param-value>
      </context-param>
      
      <listener>
          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
      

      使用这种方法,您的测试配置将如下所示(注意前导斜杠,表示资源位于类路径的根目录中):

      @ContextConfiguration("/spring-config.xml")
      

      您可能还会发现参考手册的Context configuration with XML resources 部分很有用。

      问候,

      山姆

      (Spring TestContext 框架的作者)

      【讨论】:

      • 优秀。让它与file:WebContent/WEB-INF/spring-context.xml(不使用maven)一起工作。感谢您的帮助!
      • 应该提到 Spring 不知何故知道“src/”的位置。在我的 mvn3 / surefire / Spring 设置中,这也有效(并防止资源文件加倍),但我怀疑 Surefire 为 Spring 准备上下文的方式是“src/”是一个有效的开始(而“main/”不会是)。因此,您应该知道,您的“相对”路径必须从哪里开始才能使其正常工作。
      • @ContextConfiguration 自 Spring 3.1 起支持 JavaConfig 的 classes 属性:docs.spring.io/spring/docs/current/javadoc-api/org/…
      • 详见参考手册“带注解类的上下文配置”:docs.spring.io/spring/docs/current/spring-framework-reference/…
      猜你喜欢
      • 2014-03-10
      • 2010-09-30
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      • 2013-12-26
      • 1970-01-01
      相关资源
      最近更新 更多