java.lang.NoClassDefFoundError: org/springframework/core/env/ConfigurableEnvironment

Posted

技术标签:

【中文标题】java.lang.NoClassDefFoundError: org/springframework/core/env/ConfigurableEnvironment【英文标题】: 【发布时间】:2017-01-07 19:34:01 【问题描述】:

我正在尝试使用 Spring Boot 编写一个简单的 RESTful 服务。但是,有一条我无法解决的错误消息。我一直在研究,看起来这是 SpringBoot 版本之间的冲突,但是我不确定如何摆脱它。

我有这个 SpringBootApp:

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

/**
 * REST Service application
 */
@SpringBootApplication
public class Application 

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

与此 pom.xml 相关:

<?xml version="1.0"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.websystique.springmvc</groupId>
    <artifactId>Spring4MVCHelloWorldRestServiceDemo</artifactId>
    <packaging>war</packaging>
    <version>1.0.0</version>
    <name>Spring4MVCHelloWorldRestServiceDemo Maven Webapp</name>

    <properties>
        <springframework.version>4.3.0.RELEASE</springframework.version>
        <jackson.library>2.7.5</jackson.library>
        <spring.batch.version>2.1.9.RELEASE</spring.batch.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>1.4.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>$springframework.version</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>$springframework.version</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>$springframework.version</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version> <!-- Or whatever JUnit you're using. -->
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>$jackson.library</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>$jackson.library</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.batch</groupId>
            <artifactId>spring-batch-core</artifactId>
            <version>$spring.batch.version</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-beans</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>


    </dependencies>


    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.2</version>
                    <configuration>
                        <source>1.7</source>
                        <target>1.7</target>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.4</version>
                    <configuration>
                        <warSourceDirectory>src/main/webapp</warSourceDirectory>
                        <warName>Spring4MVCHelloWorldRestServiceDemo</warName>
                        <failOnMissingWebXml>false</failOnMissingWebXml>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>

        <finalName>Spring4MVCHelloWorldRestServiceDemo</finalName>
    </build>
</project>

对我来说看起来不错,但我收到此错误:

Exception in thread "main" 
    at com.application.Application.main(Application.java:13)
Caused by: java.lang.ClassNotFoundException: org.springframework.core.env.ConfigurableEnvironment
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more

【问题讨论】:

使用机制避免冲突和重复,从spring批处理依赖中去掉 1 右键单击​​项目>maven>更新项目(强制更新快照) 2 maven clean & maven install 然后尝试 通过清除 ~/.m2/repository 目录曾经“目击”过一次... 【参考方案1】:

为我改变一切

<version>2.4.10</version>

<version>2.4.3</version>

在 pom.xml 文件中工作。

【讨论】:

【参考方案2】:

我在使用 Spring boot 2.1.9.RELEASE 时遇到了同样的问题

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

添加的 pom 依赖消除了这个异常:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.2.0.RELEASE</version>
    </dependency>

EDIT - 更好的方法。

还清理带有 spring 依赖项的 maven 存储库为我解决了问题,不需要在 pom.xml 中添加 spring-core 5.2.0.RELEASE。似乎当我在 repo 中有许多版本的 spring 时会出现一些问题。同样在再次解决依赖关系之前不要忘记清理项目。

rm -rf ~/.m2/repository/org/springframework/

【讨论】:

【参考方案3】:
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.2.RELEASE</version>
  </parent>

请为你的父母试试这个

【讨论】:

【参考方案4】:

将 boot-starter-parent 版本从 1.5.1.RELEASE 更改为 1.4.0.RELEASE。

【讨论】:

请扩展您的答案。添加附加信息,说明为什么更新到该版本可以解决操作所遇到的问题。【参考方案5】:

删除存储库中的 springframework 文件夹,然后按 Alt + F5 并更新项目(强制更新快照)。

C:\Users\xxxx\.m2\repository\org\springframework

【讨论】:

【参考方案6】:

我将运行版本 2.0.0 的 boot-starter-parent 配置更改为 1.4.0,我能够运行 java 应用程序并摆脱了这个错误

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.0.RELEASE</version>  <!-- changed it to version 1.4.0 from 2.0.0-->
    <relativePath/> <!-- lookup parent from repository -->
</parent>

【讨论】:

但是降级到旧版本并不能解决长期存在的问题。你找不到适用于更高版本的 spring boot starter 的东西吗?【参考方案7】:

推荐方法

    转到Spring boot Initialzr 站点并选择Web 堆栈作为依赖项,如下图 所示。 由于 Spring Boot 使用 Opinionated 依赖项和物料清单 的概念,它会自动拉取其他依赖项并解决您的 classNotFoundException 问题。在您的情况下,它错过了 Spring-core-4.2.4.RELEASE.jar 依赖项。

    clean install spring-boot:run -e 的形式执行 Maven 目标,您可以在 IDE 中找到您的 maven 依赖项,下面给出了一个示例 POM 文件。

      <?xml version="1.0" encoding="UTF-8"?>
     <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.example</groupId>
      <artifactId>demo</artifactId>
     <version>0.0.1-SNAPSHOT</version>
     <packaging>war</packaging>
    
         <name>demo</name>
        <description>Demo project for Spring Boot</description>
    
         <parent>
           <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-parent</artifactId>
         <version>1.4.0.RELEASE</version>
         <relativePath/> <!-- lookup parent from repository -->
       </parent>
    
        <properties>
          <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
           <project.reporting.outputEncoding>UTF-       8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        </properties>
    
     <dependencies>
         <dependency>
           <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
    
         <dependency>
              <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                 <scope>provided</scope>
          </dependency>
        <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
         </dependency>
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
          < /dependency>
        </dependencies>
    
      <build>
        <finalName>demo</finalName>
           <plugins>
             <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
             </plugin>
          </plugins>
        </build>
    

【讨论】:

【参考方案8】:

Spring boot 正在运行 -

<spring.version>4.3.2.RELEASE</spring.version>

为了-

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>1.4.0.RELEASE</version>
    </dependency>

在您导入时 -

    <springframework.version>4.3.0.RELEASE</springframework.version>

你可以在master pom上确认-

https://github.com/spring-projects/spring-boot/blob/v1.4.0.RELEASE/spring-boot-dependencies/pom.xml

你能在你的 pom 中更新 spring 版本吗?或者处理管理 maven 依赖项

【讨论】:

谢谢。我添加它并重建,但它说“缺少工件 org.springframework.boot:spring-boot-starter-web:jar:4.3.2.RELEASE” 你跑干净了吗?我正在检查 pom 导入 - 你可以从你的中删除核心,只检查其他的 您可以删除 web 依赖项,或者删除版本 - 然后它们将从 bom 继承

以上是关于java.lang.NoClassDefFoundError: org/springframework/core/env/ConfigurableEnvironment的主要内容,如果未能解决你的问题,请参考以下文章