【问题标题】:Spring Boot Error: java.lang.NoClassDefFoundError: org/springframework/util/AssertSpring Boot 错误:java.lang.NoClassDefFoundError:org/springframework/util/Assert
【发布时间】:2018-08-27 01:22:56
【问题描述】:

我是 Spring Boot 的新手,并按照一些视频教程开始学习。我创建了一个 Maven 项目,添加了工件 ID spring-boot-starter-parent 的父依赖项,添加了 spring-boot-starter-webspring-boot-starter-test 的依赖项。这是Application.java

@RestController
@EnableAutoConfiguration
public class Application {

    @RequestMapping("/")
    public String home() {
        return "Hello World";
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

注意:

src/test/javasrc/test/resources 包是空的。这是一个 Maven 项目,我正在使用 STS,执行“Maven -> 更新项目...”并使用 STS IDE 多次清理/构建整个项目,我收到以下错误。另外,我尝试在 STS 中创建一个新项目,但仍然出现以下错误:

当我以Spring Boot App 运行时遇到此错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/util/Assert
    at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:263)
    at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:247)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1246)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1234)
    at com.boot.Application.main(Application.java:18)
Caused by: java.lang.ClassNotFoundException: org.springframework.util.Assert
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 5 more

请帮我解决这个问题。

编辑:

这是我的 pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.deloitte.boot</groupId>
  <artifactId>boot-test</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>boot-test</name>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.RELEASE</version>
  </parent>
  <dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  </dependencies>
</project>

这是我的项目目录结构:

【问题讨论】:

  • 试过干净吗? gradlle 还是 mvn ?基于 ide 的清理和重建?
  • 我正在使用 STS,执行“Maven -> 更新项目...”并多次清理/构建整个项目,但我遇到了同样的错误。另外,我尝试在 STS 中创建一个新项目,但仍然遇到相同的错误。请帮忙。
  • 您可以尝试在您的应用程序类上使用@SpringBootApplication 注释吗?
  • 按照 Isank 的建议尝试
  • 另外,最好将配置/应用程序和控制器类分开。

标签: java spring maven spring-mvc spring-boot


【解决方案1】:

我已经像这样解决了这个问题,首先我删除了我的文件夹 .m2,然后我将 mvn clean install 运行到我的目录 spring boot 项目中。就是这样!

【讨论】:

  • 为我工作,为什么是现在的问题。
【解决方案2】:

在学习和制作项目时最好遵循软件原则。尝试以始终实现关注点分离的方式制作项目,这将使您的代码不仅易于理解,而且也易于调试和修复。

像这样更改您的应用程序类:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

现在制作另一个包controller并在其中制作类以供您测试

@RestController
//You can add this if you want or remove this class level mapping
@RequestMapping("/testApp")
public class TestController {

    @RequestMapping("/")
    public String home() {
        return "Hello World";
    }
}

寻求进一步帮助。请查看this (official spring.io tutorial) STS 中 Spring Boot App 的简单示例。 另一个是very simple and straightforward,用于启动并运行 Spring Boot 应用程序。

编辑:请在 pom.xml 中添加 starter test。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <version>1.5.10.RELEASE</version>
    <scope>test</scope>
</dependency>

【讨论】:

  • 我试过这个并且得到了同样的 ClassNotFound 错误。请提出建议。
  • 请发布您的 pom.xml
  • 贴在上面,请帮忙
  • 入门测试在哪里?
  • 请让我知道还需要做什么,我已将 pom.xml 更新为 started-test
【解决方案3】:

在 IntelliJ 和从 Spring Initializer 创建的全新项目中遇到了同样的问题。尝试手动编译时看到此消息:

[ERROR] error reading /Users/mike/.m2/repository/org/springframework/spring-core/5.1.4.RELEASE/spring-core-5.1.4.RELEASE.jar; zip file is empty

原来从 maven Central 下载的文件已损坏:

ls -al /Users/mike/.m2/repository/org/springframework/spring-core/5.1.4.RELEASE/spring-core-5.1.4.RELEASE.jar
-rw-r--r--  1 mike  staff  0 Jan 16 20:55 
/Users/mike/.m2/repository/org/springframework/spring-core/5.1.4.RELEASE/spring-core-5.1.4.RELEASE.jar

删除整个目录并重建会强制它下载丢失库的新副本:

./mvnw compile
Downloading from central: https://repo.maven.apache.org/maven2/org/springframework/spring-core/5.1.4.RELEASE/spring-core-5.1.4.RELEASE.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/springframework/spring-core/5.1.4.RELEASE/spring-core-5.1.4.RELEASE.pom (3.6 kB at 7.6 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/springframework/spring-core/5.1.4.RELEASE/spring-core-5.1.4.RELEASE.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/springframework/spring-core/5.1.4.RELEASE/spring-core-5.1.4.RELEASE.jar (1.3 MB at 3.6 MB/s)

【讨论】:

    【解决方案4】:

    在我安装 STS 之后遇到了同样的问题(在此之前,Eclipse 中的一切正常)。 我删除了 .m2 文件夹中的 springframework 文件夹,然后在我的项目目录中运行“mvn clean install”。之后,我的 assertj-core-3.11.1.jar 和 mockito-core-2.23.0.jar 遇到问题(ZipFile 无效 LOC 标头(错误签名)),所以我也删除了它们并运行“mvn spring-boot :运行”。

    现在它可以工作了(但我无法解释为什么)。

    【讨论】:

      猜你喜欢
      • 2020-03-26
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 2011-11-07
      • 2020-05-12
      • 2015-04-22
      相关资源
      最近更新 更多