TLDR
在IntelliJ中运行嵌入式Jetty时,但在IntelliJ之外运行相同代码时(在独立的Jetty服务器中(,出现Error creating bean with name...
错误。
深度
我们有一个在Jetty中运行的web应用程序。
直到一周前,我还能够启动并使用Intellij的嵌入式Jetty应用程序。
几天前,我的一位同事更新了其中一个bean构造函数,并为其添加了一个他创建的新bean。
因此,在zoowebappcontext.xml
中,他向bean构造函数添加了一个新条目:
<bean id="animalsService" class="java.util.ArrayList">
<constructor-arg>
<list>
<ref bean="pets.catService" />
....
<ref bean="pets.dogService" /> <-- The new item
...
在applicationContext.xml
文件中,他添加了一个新的bean定义,它看起来与那里的所有其他bean非常相似:
<bean id="pets.dogService"
class="com.example.DogServiceImpl"
parent="...">
<property name="..." ref="..."/>
</bean>
奇怪的是:如果我mvn clean install
项目,有一个新的zoo.war
,将其移动到Jetty的webapp
文件夹,并将应用程序作为独立的Jetty启动,则应用程序启动时不会出错。
但是,当在intellij的嵌入式Jetty中运行应用程序时,该应用程序试图启动,但最终失败,并出现以下错误:
org.springframework.beans.factory.BeanCreationException:创建类路径资源[zoowebappContext.xml]中定义的名称为"animalsService"的bean时出错:在使用键[14]设置构造函数参数时,无法解析对bean"pets.dogService"的引用;嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinitionException:未定义名为"pets.dogSerice"的bean
将代码移动到上述更改之前的提交,intellij能够顺利启动。
似乎intelliJ
的系统中有一些东西卡住了,就在问题开始时,它在某个时候就消失了。
一些可能有助于"重置"IntelliJ的东西(它们都没有自己解决问题(:
- 多次重新启动IntelliJ
- 重新启动计算机
- 在不同的GIT分支之间来回切换
- 文件->使缓存无效/重新启动
再说一遍,没有一个项目本身能解决这个问题。