【发布时间】:2015-12-03 04:18:51
【问题描述】:
IDE是Idea,Spring boot项目有META-INF/spring-devtools.properties,内容是
restart.include.dozer=/dozer-5.5.1.jar
运行项目时抛出异常
2015-12-03 12:02:49,491 [restartedMain] INFO org.dozer.DozerBeanMapper - Initializing a new instance of dozer bean mapper.
2015-12-03 12:02:49,494 [restartedMain] WARN o.s.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dozerBeanMapper' defined in class path resource [com/foo/common/CommonConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.dozer.Mapper]: Factory method 'dozerBeanMapper' threw exception; nested exception is java.lang.LinkageError: loader constraint violation: loader (instance of org/springframework/boot/devtools/restart/classloader/RestartClassLoader) previously initiated loading for a different type with name "org/dozer/DozerBeanMapper"
2015-12-03 12:02:49,517 [restartedMain] ERROR org.springframework.boot.SpringApplication - Application startup failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dozerBeanMapper' defined in class path resource [com/foo/common/CommonConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.dozer.Mapper]: Factory method 'dozerBeanMapper' threw exception; nested exception is java.lang.LinkageError: loader constraint violation: loader (instance of org/springframework/boot/devtools/restart/classloader/RestartClassLoader) previously initiated loading for a different type with name "org/dozer/DozerBeanMapper"
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599) ~[spring-beans-4.2.3.RELEASE.jar:4.2.3.RELEASE]
奇怪的是,在 Eclipse 中运行项目时,没有出现上述问题。
在idea中添加-XX:+TraceClassLoading配置,发现dozer加载了两次。
9569 [Loaded org.dozer.DozerBeanMapper from file:/C:/Users/otto/.m2/repository/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar]
9618 [Loaded org.dozer.DozerBeanMapper from file:/C:/Users/otto/.m2/repository/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar]
现在不知道怎么定位这个问题的原因?
【问题讨论】:
-
你能分享一个重现问题的小样本吗?
-
@Andy Wilkinson 嘿,我创建了一个极简主义样本--gist.github.com/zhugw/63e98f99098156e8173a。运行 FooAplication,你可能会产生那个错误。
-
您能否将实际项目推送到某个地方的 Git 存储库中?我想确定我正在运行与您完全相同的代码,并且从一个要点将它们拼凑在一起意味着情况可能并非如此。
-
@Andy Wilkinson 对不起!我已经将该项目上传到 github--github.com/zhugw/sample.git
标签: intellij-idea spring-boot classloader