繁体   English   中英

Spring Application Context无法加载配置文件

[英]Spring Application Context can't load the configuration files

我有2个项目。 一个包含一些组件(POJO)的插件项目,一个包含相应单元测试和集成测试的片段项目。 我正在使用Tycho来构建这些项目,并且我想使用Spring来引导集成测试。

我已经用注释了我的测试课

@ContextConfiguration(locations = { "classpath*:spring/*-config.xml" })
@RunWith(SpringJUnit4ClassRunner.class)

但是,当我尝试使用tycho( clean install )构建项目或在eclipse中以Plugin-Test运行测试类时,Spring抱怨定义的上下文中没有bean。 在日志中,我发现了以下几行:

DEBUG o.s.t.c.s.AbstractGenericContextLoader - Loading ApplicationContext for 
      locations [classpath*:spring/*-config.xml].
DEBUG o.s.b.f.xml.XmlBeanDefinitionReader - Loaded 0 bean definitions from 
      location pattern [classpath*:spring/*-config.xml]

我将配置文件放在src/main/java/spring/src/main/resources/spring但是spring找不到它们。 我还尝试将这些路径显式添加到清单中的bundle-classpath中。

当我将配置路径更改为"file:spring/some-config.xml" spring正在加载我的bean定义,但是当它尝试使用以下输出加载“ context”模式时崩溃:

Configuration problem: Unable to locate Spring NamespaceHandler for XML schema
namespace [http://www.springframework.org/schema/context]

为什么它不能与classpath前缀一起使用? 为何使用文件前缀? 我以为文件前缀仅适用于文件系统,不适用于jar文件...我在做什么错?

提前致谢

更新:这是(片段)测试项目的完整视图:

/
+-- src/main/java/
|   +-- MyTestClass.java
|
+-- src/main/resources/
|   +-- spring/
|   |   +-- some-config.xml
|   +-- log4j.properties
|
+-- META-INF/
|   +-- MANIFEST.MF
|
+-- pom.xml

在tycho尝试执行我的测试类之后,我在target下看到以下文件:

/target
|
+-- classes/
    +-- MyTestClass.class
    +-- spring/
        +-- some-config.xml
    +-- log4j.properties
+-- work/   // contains the eclipse configuration (config.ini, etc.)
+-- MANIFEST.MF
+-- mybundle-xx.jar

我省略了属性和surfire文件。 在target / work / configuration /下生成的config.ini将清单中提到的所有包列为必需的包。 除了我的测试片段捆绑包外,它们都被称为jar文件。 对于测试包,存在以下条目:

reference\:file\:C\:/[...]/workspaces/workspace/my.bundle.tests

这个对吗? 至少可以解释为什么文件前缀起作用了...但是类路径前缀呢? 清单是否已复制到目标文件夹中的正确位置? 我的意思是,它位于dev.properties引用的classes文件夹dev.properties
此外,log4j在启动时会抱怨它配置不正确,这表明它无法在类路径上找到log4j.properties。

更新:现在我正在尝试另一种方式。 我已经阅读了这篇文章 ,这似乎是使事情运行起来更简单的方法。 因此,我已将maven-surfire-plugin添加到pom中,并将包装类型从“ eclipse-test-plugin”更改为“ jar”,以使tycho不运行它自己的surefire-plugin。 但是现在我站在另一个问题的前面。 Spring似乎仅为maven2存储库提供ArtifactLocator,而不为tycho用途提供p2存储库。
有谁知道那里是否有ArtifactLocator用于p2存储库?

是否有人将tycho,osgi和spring使用相同的设置进行集成测试?

spring-context-xx.jar放在您的类路径上。

命名空间由NamespaceHandler接口的实现处理。 在启动时,spring会全部加载它们,并尝试使用加载的处理程序解析每个名称空间。 如果它们都不声称能够解析它,则抛出异常。 context:名称空间由ContextNamespaceHandler解析,该名称位于上述jar中。

根据http://blog.vogella.com/2010/07/06/reading-resources-from-plugin/ ,使用Tycho我尝试过以下位置:

"platform:/plugin/<host-bundle-id>/<path-to-resource>"

现在它能够将上下文配置作为资源加载。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM