java - 如何找到 "Could not resolve placeholder"原因

标签 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”类(class)。在移动之前,JUnit ProcessOneTest 类工作正常;移动 SupportOne 后,JUnit 测试会抛出此错误。

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

所以我并不是在找人来告诉我这里出了什么问题。但如果有人有一种方法可以让我弄清楚,我将不胜感激。

最佳答案

事实证明,通过删除服务器项目中 applicationContext-test.xml 文件的“扫描”部分,可以“修复”此问题。事实证明,扫描是不需要的,显然是因为曾经被扫描过的组件现在不会引起某种问题。我们仍然不确定为什么这是一个问题。

关于java - 如何找到 "Could not resolve placeholder"原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21464967/

相关文章:

java - 从 Eclipse 运行 Struts2 应用程序时出现不同的错误

java - ClipboardManager 不适用于 Android Q。有什么解决方法吗?

java - 如何使用Java正确地将多边形创建到shapefile中?

Eclipse/Subclipse : Switch from branch to trunk with modified sources?

java - 使用远程 Web 服务管理 Hibernate 并发

java - 使用 JAXB 编码嵌套类

java - Eclipse 中的 Android - 在后台调用 File Writer 类

java - Eclipse:使用 Java Code Formatter 进行 block 式字段对齐

java - @WebMvcTest 在 spring 启动测试中为不同的服务给出 'Error creating bean with name' 错误

java - Spring Boot 无法启动 Tomcat 8