04. maven 三种项目打包方式 pom、jar、war 的区别(记一次 Spring 项目启动报错)

文章目录

  • [1. 记一次 Spring 项目启动报错](#1. 记一次 Spring 项目启动报错)
    • [1.1 现象](#1.1 现象)
    • [1.2 分析](#1.2 分析)
    • [1.3 过程复现](#1.3 过程复现)
  • [2. maven 项目三种打包方式的区别](#2. maven 项目三种打包方式的区别)

1. 记一次 Spring 项目启动报错

1.1 现象

我在项目下创建了一个子模块,然后又将该子模块移除,之后启动报错,如下:

java 复制代码
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 exist
	at 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 exist
	at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:180)
	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:333)
	... 13 more

Process finished with exit code 1

1.2 分析

主要报错信息如下,是说从类路径加载 applicationContext.xml 文件失败,因为类路径的 resources 目录下没有 applicationContext.xml 文件。

java 复制代码
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 文件:

java 复制代码
    <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 标签移除,重新编译后,才可正常启动项目。

2. maven 项目三种打包方式的区别

  • pom<packaging>pom</packaging> 一般用于父子工程或者聚合项目中,这个父 pom.xml 文件就是用来做 jar 包的版本控制。如果是父子工程或者聚合项目,那么必须指明这个工程的打包方式为 pom。
  • jar:将会打包成 jar 包使用,通常是开发时要引用通用类,打成 jar 包便于存放管理。
  • war:是做好一个 web 网站后,打成 war 包部署到服务器。
相关推荐
云烟成雨TD1 天前
Spring AI Alibaba 1.x 系列【6】ReactAgent 同步执行 & 流式执行
java·人工智能·spring
那个失眠的夜1 天前
Mybatis延迟加载策略
xml·java·数据库·maven·mybatis
Java成神之路-1 天前
SpringMVC 响应实战指南:页面、文本、JSON 返回全流程(Spring系列13)
java·spring·json
砍材农夫1 天前
spring-ai 第六模型介绍-聊天模型
java·人工智能·spring
云烟成雨TD1 天前
Spring AI Alibaba 1.x 系列【5】ReactAgent 构建器深度源码解析
java·人工智能·spring
Flittly1 天前
【SpringAIAlibaba新手村系列】(15)MCP Client 调用本地服务
java·笔记·spring·ai·springboot
Flittly1 天前
【SpringAIAlibaba新手村系列】(14)MCP 本地服务与工具集成
java·spring boot·笔记·spring·ai
mfxcyh1 天前
基于xml、注解、JavaConfig实现spring的ioc
xml·java·spring
Flittly1 天前
【SpringAIAlibaba新手村系列】(13)Tool Calling 函数工具调用技术
java·spring boot·spring·ai