Exception in thread "main" java.lang.NoSuchMethodError: org.springframework.boot.SpringApplication.run(Ljava/lang/Object;[Ljava/lang/String;)Lorg/springframework/context/ConfigurableApplicationContext; at com.meicloud.PortalSysApplication.main(PortalSysApplication.java:10)
时间: 2025-07-26 12:35:46 浏览: 13
<think>我们正在解决一个SpringBoot启动时出现的`java.lang.NoSuchMethodError`异常。异常信息为:`java.lang.NoSuchMethodError: org.springframework.boot.SpringApplication.run(Ljava/lang/Object;[Ljava/lang/String;)Lorg/springframework/context/ConfigurableApplicationContext;`这个错误通常是由于Spring Boot版本不兼容或依赖冲突引起的。具体来说,可能是项目中引用了不同版本的Spring Boot库,导致在运行时找不到对应的方法。###解决步骤####1. **检查SpringBoot版本**首先,确保你的项目中使用的Spring Boot版本是一致的。在Maven项目中,检查`pom.xml`文件中的`<parent>`标签或`<properties>`标签中定义的SpringBoot版本。例如:```xml<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.0</version><!--确保版本一致 --></parent>```或者使用`<properties>`:```xml<properties><spring-boot.version>2.7.0</spring-boot.version></properties>```
####2. **检查依赖冲突**使用Maven命令检查依赖树,查找是否有多个版本的SpringBoot库被引入:```bashmvndependency:tree```在输出中搜索`spring-boot`相关的依赖,确保只有一个版本。如果发现多个版本,可以通过排除不需要的版本来解决冲突。例如:```xml<dependency><groupId>com.example</groupId><artifactId>example-artifact</artifactId><version>1.0.0</version><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></exclusion></exclusions></dependency>```
####3. **检查SpringBoot的启动类**确保你的启动类(通常带有`@SpringBootApplication`注解的类)正确调用了`SpringApplication.run`方法。例如:```java@SpringBootApplicationpublicclass Application{public staticvoid main(String[]args){SpringApplication.run(Application.class, args);}}```注意:`run`方法的第一个参数是当前类的Class对象,第二个是`main`方法的参数。####4.**清理和重新构建项目**有时候,构建过程中可能出现问题,导致旧的依赖残留。执行以下操作:-清理项目:`mvnclean`-重新构建:`mvn install`####5.**检查IDE中的依赖设置**如果你使用的是IDE(如IntelliJ IDEA或Eclipse),确保IDE正确识别了所有依赖。可以尝试:-更新Maven项目(在IDE中通常有刷新按钮)-清理并重新导入Maven项目####6. **参考已知的解决方案**根据引用[^2]中的信息,有时依赖的版本冲突也会导致类似问题。例如,如果你同时使用了`mybatis-spring-boot-starter`和`mybatis-plus-boot-starter`,需要注意它们的版本兼容性。可以尝试调整版本号,比如将`mybatis-plus-boot-starter`的版本从`3.5.7`调整为`3.3.1.tmp`(但请注意,使用临时版本可能不稳定,建议使用官方稳定版本)。####7. **考虑SpringBoot内置Tomcat的兼容性**引用[^3]提到,Spring Boot项目可以打包为WAR在外部Tomcat中运行,但要注意Tomcat版本与SpringBoot内置Tomcat版本的兼容性。如果使用外部Tomcat,需要排除内置Tomcat:```xml<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions></dependency>```同时,确保外部Tomcat的版本与Spring Boot要求的版本一致。###总结`NoSuchMethodError`通常是由于类路径中存在多个版本的库,导致JVM加载了错误版本的类。通过以上步骤,特别是检查依赖树和版本一致性,应该能解决这个问题。如果问题依旧,请检查项目中是否有其他地方(如本地仓库)存在版本冲突。§§相关问题§§1.如何解决SpringBoot中的依赖冲突问题?
2.如何使用Maven排除依赖?3.Spring Boot项目打包为WAR时需要注意什么?</think>### 解决 Spring Boot 启动时的 `NoSuchMethodError` 异常
#### 问题分析
异常信息:
```java
java.lang.NoSuchMethodError: org.springframework.boot.SpringApplication.run(Ljava/lang/Object;[Ljava/lang/String;)Lorg/springframework/context/ConfigurableApplicationContext;
```
该错误表明:
1. **版本冲突**:Spring Boot 核心库版本与依赖库不兼容(常见于多模块项目或依赖管理混乱)
2. **方法签名不匹配**:编译时使用的 Spring Boot 版本与运行时实际加载的版本不一致
3. **依赖污染**:项目引入了多个冲突的 Spring Boot 或 Spring Framework 版本
---
#### 解决方案(逐步操作)
##### 步骤 1:统一 Spring Boot 版本
在 Maven 的 `pom.xml` 中强制指定统一版本:
```xml
<properties>
<!-- 根据实际需求选择稳定版本 -->
<spring-boot.version>2.7.18</spring-boot.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
```
##### 步骤 2:检查冲突依赖
执行依赖树分析:
```bash
mvn dependency:tree -Dincludes=org.springframework
```
重点关注:
- 多个不同版本的 `spring-boot-starter`
- `spring-core` 版本不一致
- 第三方库引入的 Spring 依赖(如 MyBatis Plus)
##### 步骤 3:排除冲突依赖(示例)
若发现 MyBatis Plus 引入冲突:
```xml
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.7</version>
<exclusions>
<!-- 排除旧版 Spring 依赖 -->
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
</exclusions>
</dependency>
```
##### 步骤 4:清理构建缓存
1. 删除本地 Maven 仓库中的冲突依赖:
```bash
rm -rf ~/.m2/repository/org/springframework
```
2. 清理项目构建:
```bash
mvn clean install -U
```
##### 步骤 5:验证启动类签名
确保启动类方法签名与当前 Spring Boot 版本匹配:
```java
@SpringBootApplication
public class App {
public static void main(String[] args) {
// 正确方法签名
SpringApplication.run(App.class, args);
}
}
```
---
#### 关键预防措施
1. **使用 BOM 管理版本**:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.18</version>
<type>pom</type>
<scope>import</scope>
</dependency>
```
2. **避免混用 starter**:如同时使用 `mybatis-spring-boot-starter` 和 `mybatis-plus-boot-starter` 时需确保版本兼容[^2]
3. **IDE 辅助**:在 IntelliJ IDEA 中使用 **Maven Helper** 插件可视化冲突依赖
> **提示**:若问题仍未解决,检查是否在 Tomcat 中部署 WAR 包时混用了外部和内置 Tomcat 库[^3],建议:
> ```xml
> <dependency>
> <groupId>org.springframework.boot</groupId>
> <artifactId>spring-boot-starter-tomcat</artifactId>
> <scope>provided</scope> <!-- 打包时排除内置 Tomcat -->
> </dependency>
> ```
阅读全文
相关推荐



















