【发布时间】:2012-01-13 14:02:02
【问题描述】:
我已经调试了一段时间了,我希望有人可以在这里提供一些启示。
我有一个使用 JDK 1.6 添加到 Jenkins 中的 Maven 项目。我在这个项目中使用 AOP 来处理数据库事务。
当我在 Jenkins 中运行构建时,我的测试用例失败并出现以下异常:-
Caused by: org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'dataHandlerClassificationImpl':
Injection of resource dependencies failed; nested exception is
org.springframework.beans.factory.BeanNotOfRequiredTypeException:
Bean named 'writerDataLocationImpl' must be of type [xxx.script.WriterData],
but was actually of type [$Proxy17]
...
...
Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException:
Bean named 'writerDataLocationImpl' must be of type [xxx.script.WriterData],
but was actually of type [$Proxy17]
...
...
DataHandlerClassificationImpl 类看起来像这样:-
@Service
public class DataHandlerClassificationImpl extends DataHandler {
@Resource(name="writerDataLocationImpl")
private WriterData writerData;
...
}
WriterData 是一个具有多个实现的接口。
我能够从 IDE 毫无问题地执行代码。为了确定是 Maven 问题还是 Jenkins 问题,我使用命令行导航到 Jenkins 的项目作业文件夹,并且能够运行 mvn test 而没有任何错误。
我知道代理错误与 AOP 有关,并且我只能自动连接到接口而不是具体类...但这里不是这种情况,因为我能够在 Jenkins 之外正常运行我的代码.
有什么想法吗?谢谢。
【问题讨论】:
-
您是否在 Jenkins 上运行 Cobertura、Sonar 或其他代码检测工具?确切的
mvn构建命令是什么?在处理编译错误后,您可以尝试将注入的文件替换为private Object writerData并转储writerData.getClass().getInterfaces吗?这可能会给我们一个线索,让我们知道这个不需要的和奇怪的代理的性质是什么。 -
在 Jenkins 的“目标和选项”下,我有
clean cobertura:cobertura site。出于好奇,我将其更改为clean test并且效果很好。当我将其更改为clean site时,我又遇到了同样的异常。看起来它与site有关。有任何想法吗?谢谢。 -
@Thomasz,我究竟该如何转储
writerData.getClass().getInterfaces? Intellij 基本上给了我一个常规的编译错误。 -
肯定和
mvn site有关。我从命令行运行了该命令,并且得到了确切的异常。我不确定为什么这与test的行为不同。 -
试试这个:
Arrays.asList(new Object().getClass().getInterfaces())在afterPropertiesSet或@PostConstruct中。我有点惊讶site导致这个问题出现,因为我知道 Cobertura/Sonar 倾向于引入这个错误。您可以单独尝试mvn cobertura:cobertura吗?也应该失败...
标签: spring unit-testing junit hudson jenkins