背景简介
SpringMVC项目启动出现以下报错。
核心报错信息
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/spring-mvc.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/spring-mvc.xml]
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
配置文件信息
1)spring-mvc.xml配置文件位置
2)web.xml内容
<!--配置DispacherServlet-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/spring-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
原因
发现spring-mvc.xml文件并没有编译进target目录。
父pom文件手动加载了resources目录,导致覆盖原有的默认资源编译目录。
解决
方法一:
pom文件添加如下配置,把目标文件夹下的文件编译到target目录中。因为java程序运行过程中是直接加载target目录中编译好的程序进行执行的!
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
修改pom文件后,将项目target下的字节码文件clean掉,再重新compile。
方法二:
把pom.xml配置的resources标签内容删除,当xml在resources的下级目录时,会默认将resources下的文件编译进target目录。