如何找到“无法解决占位符”的原因

时间:2014-01-30 18:45:26

标签: java eclipse spring maven junit

我正在寻找一种方法,而不是答案。

我有一个现有的,工作的Spring“服务器”项目,maven目录结构,包括JUnit测试。我还有一个现有的“库”项目,与服务器项目不同的目录树,由服务器项目和其他服务器项目使用。

我正在尝试将某些类从服务器项目移动到库项目。我使用了eclipse的重构移动函数,因为它搜索java和XML文件,似乎很好地改变了需要改变的内容。我把课程搬了过来,纠正了编译错误。

但是,现在我在服务器项目中进行了JUnit测试失败,我无法弄清楚原因。错误都是“无法解析占位符”,并且引用移动的类中使用“@Value”注释的字段,例如:

@Value("x.y.maxRetries")
private int allowedRetries;

这些值都不是新的 - 我根本没有更改这些类中的代码 - 因此配置确实具有这些值。但它似乎告诉我它找不到它们。不同的名称(maxRetries v allowedRetries)是有意的,这就是它们在服务器项目中的工作方式。

如果我切换回我移动它之前的分支,一切都很好。分支之间的唯一区别是移动的Java文件的位置。

JUnit测试不是直接测试移动的类;移动的类只是间接使用。也就是说,我们可能在服务器项目中有一个“ProcessOne”类和一个“ProcessOneTest”类,不为所动。我们在库中也有一个“SupportOne”类。在移动之前,JUnit ProcessOneTest类工作正常;在移动SupportOne之后,JUnit测试会抛出此错误。

JUnit测试类具有`@ContextConfiguration(locations = {“/ spring / applicationContext-test.xml”})。我想我能以某种方式纠正那里的事情,但无论目录是什么,在我看来它应该与服务器项目相关,因此不应该改变。而且,它的价值再次没有改变。

所以我不是在找人告诉我这里有什么问题。但是,如果某人有方法可以解决这个问题,我会很感激。

2 个答案:

答案 0 :(得分:1)

通过删除服务器项目中applicationContext-test.xml文件的“scan”部分,结果证明这是“固定的”。事实证明,扫描不是必需的,显然有一些关于过去曾经被扫描但现在不会引起某种问题的组件的事情。我们仍然不确定为什么这是一个问题。

答案 1 :(得分:0)

尝试在服务器和库目录中对“x.y.maxRetries”键进行全文搜索。您很可能只在服务器项目中找到包含密钥的资源。

服务器bean是否由与库bean不同的Spring上下文管理?如果是,则库上下文中的占位符配置器可能不会引用包含正确密钥的资源。