当前位置: 首页 > news >正文

Spring Boot 项目部署启动异常问题分析与解决​:主类缺失与依赖冲突的分析

Spring Boot 项目部署启动异常问题分析与解决

在近期的 Spring Boot 项目部署工作中,遭遇了一起典型的启动异常状况。经过多维度的深入排查以及细致的调试,最终确定问题的根源在于打包插件配置与依赖管理的综合影响。以下将详细阐述整个问题的分析过程以及对应的解决办法。

一、初始报错:No Main Manifest Attribute

当项目首次尝试通过java -jar命令启动时,系统抛出了no main manifest attribute异常。经过初步排查,发现项目的MANIFEST.MF文件中缺少Main-Class条目。根据过往经验,此类问题通常与打包插件的配置存在关联。

排查过程

检查插件配置:项目起初采用maven-jar-plugin进行打包操作。为解决上述问题,首先对该插件的配置进行修改,明确指定主类,具体配置如下:

<plugin>

    <groupId>org.apache.maven.plugins</groupId>

    <artifactId>maven-jar-plugin</artifactId>

    <version>3.3.0</version>

    <configuration>

		<archive>

			<manifest>

				<mainClass>cn.zcyun.xcloud.srv.xconn.Application</mainClass>

			</manifest>

		</archive>

    </configuration>

</plugin>

从功能层面看,maven-jar-plugin作为 Maven 的基础插件,核心功能聚焦于将项目编译后的 class 文件打包成标准的 JAR 文件。它对项目的处理较为常规,不会对项目的运行环境和启动机制做特殊处理。而spring-boot-maven-plugin专为 Spring Boot 项目量身定制,除了具备基本的打包功能外,还能将 Spring Boot 项目所需的依赖项妥善整合进最终的可执行 JAR 包,并且自动配置Main-ClassJarLauncher,这是 Spring Boot 项目能够正确启动的关键设置。同时,它支持对 Spring Boot 项目的自动配置机制,保证项目在启动时能依据配置正确加载各类组件和服务。

在配置方式上,maven-jar-plugin相对简单。在上述配置中,主要通过<archive>标签下的<manifest>子标签来手动指定Main-Class。如果项目有其他诸如自定义 Manifest 属性等需求,也在<manifest>标签内添加相应配置。相比之下,spring-boot-maven-plugin的配置更为丰富和灵活。除了可通过<configuration>标签下的<mainClass>指定主类外,它还能配置启动脚本相关属性,例如<executable>标签可设置生成的 JAR 包是否为可执行文件;<layout>标签能定义打包的布局结构,如ZIPJAR等格式;<addResources>标签可控制是否将项目资源文件一并打包等。

从适用场景而言,maven-jar-plugin适用于普通的 Java 项目,这些项目结构相对简单,没有复杂的依赖管理和特定的运行环境要求,只需要将代码打包成 JAR 文件以便在 Java 虚拟机上运行。而spring-boot-maven-plugin则专门适用于 Spring Boot 项目。Spring Boot 项目具有自身独特的依赖管理体系、自动配置机制以及特定的启动方式,spring-boot-maven-plugin能够全方位满足这些特性需求,确保 Spring Boot 项目能够顺利打包、部署和启动。

重新进行打包并运行项目,然而此时却抛出了依赖缺失异常,提示一个通过submodule引入的类无法找到。最初怀疑是submodule的引入出现问题,遂对submodule项目执行mvn install命令,结果显示无异常。

需要注意的是,Spring Boot 项目需要依赖spring-boot-maven

相关文章:

  • Java 集合框架:数据管理的强大工具
  • vue知识点(4)
  • STM32F407 定时器
  • 第九课:异步爬虫进阶:aiohttp与多线程的技术博客
  • 【Java 和 Scala】-- Java 与 Scala 的 Assert 断言对比
  • AI Agent系列(四) -Agent架构认知
  • 【ODHead】BEVDet的 CenterHead的推理和拓展到蒸馏损失的算法细节
  • java后端开发day31--集合进阶(一)-----Collection集合List集合数据结构1
  • Hive SQL 精进系列:字符串拼接的三种常用方式
  • 【WRF-Chem】预处理工具(Preprocessors)总结
  • es-索引详解
  • 论文笔记 - ULTRA-SPARSE MEMORY NETWORK
  • 解决:外部调用存储过程时突然变慢,但是在sql server运行很快
  • ios打包需要的证书及步骤
  • flutter dio库 源码赏析
  • Java继承机制深度解析:子类如何继承父类及内存原理解析
  • 《A Gentle Introduction to Graph Neural Networks》-GNN的综述性论文
  • 玩转python:掌握Python数据结构之Trie树
  • Django部署Filemanagement
  • Next.js介绍(React框架)
  • 中国词学研究会原会长、华东师大教授马兴荣逝世,享年101岁
  • 习近平向中国人民解放军仪仗队致意
  • 105岁八路军老战士、抗美援朝老战士谭克煜逝世
  • 无人机穿越大理千年古塔落券洞内,涉事“飞手”被行拘10日
  • 4月深圳新房、二手房成交同比均上涨,“5月有望延续积极向好的发展态势”
  • 过半中国上市公司去年都在“扩编”,哪些公司人效最高