【问题标题】:java.lang.NoClassDefFoundError: org/springframework/core/env/ConfigurableEnvironmentjava.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" java.lang.NoClassDefFoundError: org/springframework/core/env/ConfigurableEnvironment
    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 目录曾经“目击”过一次...

标签: java eclipse spring maven spring-boot


【解决方案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】:

          推荐方法

          1. 转到Spring boot Initialzr 站点并选择Web 堆栈作为依赖项,如下图 所示。
          2. 由于 Spring Boot 使用 Opinionated 依赖项和物料清单 的概念,它会自动拉取其他依赖项并解决您的 classNotFoundException 问题。在您的情况下,它错过了 Spring-core-4.2.4.RELEASE.jar 依赖项。
          3. 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 继承
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-06-27
            • 2018-10-06
            • 2019-12-16
            • 1970-01-01
            • 2013-04-06
            相关资源
            最近更新 更多