Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring应用程序上下文可以';不要加载配置文件_Java_Spring_Unit Testing_Osgi_Integration Testing - Fatal编程技术网

Java Spring应用程序上下文可以';不要加载配置文件

Java Spring应用程序上下文可以';不要加载配置文件,java,spring,unit-testing,osgi,integration-testing,Java,Spring,Unit Testing,Osgi,Integration Testing,我有两个项目。包含一些组件(POJO)的插件项目和包含相应单元和集成测试的片段项目。我正在使用Tycho来构建这些项目,我想使用Spring来引导我的集成测试 我已经用 @ContextConfiguration(locations = { "classpath*:spring/*-config.xml" }) @RunWith(SpringJUnit4ClassRunner.class) 但是,当我尝试使用tycho(clean install)构建项目或在eclipse中以插件测试的形式运

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

我已经用

@ContextConfiguration(locations = { "classpath*:spring/*-config.xml" })
@RunWith(SpringJUnit4ClassRunner.class)
但是,当我尝试使用tycho(
clean install
)构建项目或在eclipse中以插件测试的形式运行测试类时,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类路径中

当我将配置路径更改为
“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]
为什么不使用类路径前缀?为什么它使用文件前缀?我认为文件前缀只适用于文件系统,而不适用于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
我已经记录了财产和冲浪文件。target/work/configuration/下生成的config.ini将清单中提到的所有捆绑包列为所需捆绑包。除了我的测试片段包之外,它们被引用为jar文件。对于测试包,存在以下条目:

reference\:file\:C\:/[...]/workspaces/workspace/my.bundle.tests
这是正确的吗?它至少可以解释为什么文件前缀是有效的。。。 但是类路径前缀呢?清单是否已复制到目标文件夹中的正确位置?我的意思是,它不在
dev.properties
中引用的
classes
文件夹中 此外,log4j在启动时抱怨它没有正确配置,这表明它在类路径上找不到log4j.properties

更新:现在我正在尝试另一种方法。我读过,这似乎是一个更容易让事情运转起来的方法。因此,我将maven冲浪插件添加到我的pom中,并将我的打包类型从“eclipse测试插件”更改为“jar”,这样tycho就不会运行自己的surefire插件。但现在我站在另一个问题面前。Spring似乎只为maven2存储库提供了ArtifactLocator,而不为tycho使用的p2存储库提供了ArtifactLocator。
有人知道p2存储库是否有ArtifactLocator吗


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

spring context xx.jar
放在类路径上

命名空间由
NamespaceHandler
接口的实现来处理。在启动时,spring加载所有名称空间,并尝试用加载的处理程序解析每个名称空间。如果没有人声称能够解析它,则抛出异常。
上下文:
名称空间由
ContextNamespaceHandler
解析,它位于前面提到的jar中。

使用Tycho, 根据 我尝试了以下地点:

"platform:/plugin/<host-bundle-id>/<path-to-resource>"
“平台:/plugin/”

现在可以将上下文配置作为资源加载。

检查您的xml上下文配置是否与jar文件打包。是。配置文件位于jar“/spring/some config.xml”的根文件夹下。在清单中添加了“.”的类路径条目。我已经将spring-context-xx.jar添加到清单中所需的bundle中。因为我的插件在OSGi容器中运行,所以我认为这就足够了。springframework捆绑包是否不支持OSGi?默认情况下,我认为它们不支持OSGi。我想他们应该是osgi的ed@coding.mof不,正常的bundle不支持OSGi,但是,我有点困惑。在春天的DMDoku中我发现了这个。第7.4点指出,自版本2.5以来,springframework捆绑包支持OSGi。我检查了我的版本。我使用的是Spring3.0.6和SpringDM2.0.0.M1。但是缺少模式定义的错误看起来像OSGi中的类加载器问题……也许。我必须承认我没有使用SpringOSGi,但问题肯定是因为特定的jar没有正确加载