文章目录
- 1. 记一次 Spring 项目启动报错
- 1.1 现象
- 1.2 分析
- 1.3 过程复现
- 2. maven 项目三种打包方式的区别
1. 记一次 Spring 项目启动报错
1.1 现象
我在项目下创建了一个子模块,然后又将该子模块移除,之后启动报错,如下:
com.zk.App
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [applicationContext.xml]; nested exception is java.io.FileNotFoundException: class path resource [applicationContext.xml] cannot be opened because it does not existat org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:224)at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:195)at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:257)at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:128)at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:94)at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:638)at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:523)at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:144)at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:85)at com.zk.App.main(App.java:17)
Caused by: java.io.FileNotFoundException: class path resource [applicationContext.xml] cannot be opened because it does not existat org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:180)at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:333)... 13 moreProcess finished with exit code 1
1.2 分析
主要报错信息如下,是说从类路径加载 applicationContext.xml 文件失败,因为类路径的 resources 目录下没有 applicationContext.xml 文件。
IOException parsing XML document from class path resource [applicationContext.xml]; class path resource [applicationContext.xml] cannot be opened because it does not exist
出现原因:配置文件没有被编译到 target 文件夹下的 resources 目录下,因此找不到该名字的配置文件。有可能是因为 maven 项目打包方式的问题。
检查 pom 文件:
<groupId>org.example</groupId><artifactId>Spring</artifactId><packaging>pom</packaging><version>1.0-SNAPSHOT</version>
将 pom 文件的 packaging 标签去掉或将标签内的 pom 改为 war 或者 jar 即可(需要重新编译 maven 项目)。
1.3 过程复现
新建 maven 项目,pom 文件中不会生成 <packaging> 标签。
新建子模块后,父模块的 pom 文件如下
新增了 <packaging> 标签和 <modules> 标签,<modules> 标签指向子模块。随后,移除子模块,启动项目时报前述错误。
检查发现,项目子模块依然存在且 pom 文件未发生变化。
右键子模块发现还需 delete 才可删除子模块。
delete 之后,发现 pom 文件报错。
子模块被删除,modules 标签也需要对应删掉。同时还需要修改打包方式或将 package 标签移除,重新编译后,才可正常启动项目。