org.springframework.context.ConfigurableApplicationContext 类型无法解析,它是从所需的 .class 文件间接引用的。

17

我正在按照spring.io的教程spring.io,使用spring boot构建spring应用程序。

我可以在一台电脑上完美运行程序。 当我尝试在另一台电脑上运行时,出现以下错误:

The type org.springframework.context.ConfigurableApplicationContext cannot be resolved. It is indirectly referenced from required .class files

我已经尝试删除和添加我的JRE系统库(JDK 1.8),以及使用Maven清理和更新项目,甚至删除并重新导入整个项目。所有这些方法都没有成功。

我的pom文件是:

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.1.RELEASE</version>
  </parent>

  <groupId>test.api</groupId>
  <artifactId>api.test</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>api.test Maven Webapp</name>
  <url>http://maven.apache.org</url>

  <dependencies>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
     </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>

   <properties>
       <java.version>1.8</java.version>
   </properties>

  <build>
    <finalName>api.test</finalName>
    <plugins>
      <plugin>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

</project>

给我报错的类是 HelloWorldConfiguration.java 类。

package hello;

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

@SpringBootApplication
public class HelloWorldConfiguration {

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

}

非常感谢任何帮助。谢谢。


1
在第二台机器上,如果无法运行,请在本地m2存储库中验证Maven依赖项是否正常,即JAR文件是否存在且未损坏。 - Nadir
这些jar包已经存在,但我该如何验证它们是否已损坏,如果是的话,我该如何修复它们? - user2719805
1
使用7zip或其他类似的工具打开它们,检查类是否存在。 - Nadir
请尝试此链接 - RITZ XAVI
@RITZXAVI 我尝试了那个链接,但它没有解决问题。 @Nadir 再次检查,我不确定这些jar包是否存在。在.m2中,我有...\.m2\repository\org\springframework\spring-context而不是...\.m2\repository\org\springframework\context - user2719805
12个回答

41

你在第二个机器上的Maven缓存已经损坏。该JAR文件无法被打开,这就是你会收到异常信息的原因。

你可以通过在该项目的第二个机器上运行以下命令来修复它:


mvn dependency:purge-local-repository
如果这不起作用,请尝试删除该机器上的本地存储库 (~/.m2/repository/org/springframework),然后再次运行mvn package

我认为我的问题可能有更深层次的隐藏。当我尝试运行代码时,现在出现了“无法实例化SLF4J LoggerFactory”的错误。感谢您的帮助。 - user2719805

12

我之前也遇到过同样的问题。可能发生了一些依赖项损坏。您可以清除并重新解决依赖项。

具体操作如下:

  1. 进入包含pom.xml文件的项目位置。
  2. 在此处打开命令提示符并输入以下命令:
  3. mvn dependency:purge-local-repository -DreResolve=true


3

我曾经遇到过同样的问题,并按照以下步骤解决了它:

1. 关闭Eclipse

2. 删除存储库文件夹.m2/repository中的所有文件

3. 重新打开Eclipse并更新您的Maven项目


1

我曾经遇到过同样的问题。我解决了这个问题,方法是删除本地计算机上Maven (.m2)的本地仓库目录。这种方法对我很有效。


1
  1. 找出你的项目使用的spring-context版本:

(在Eclipse中:项目资源管理器 -> [你的项目] -> Maven 依赖)

或者

mvn dependency:tree

列出项目的所有依赖项。
2. 从您的Maven存储库 .m2/repository 中删除文件夹org/springframework/spring-context/5.0.9.RELEASE。假设5.0.9.RELEASE是spring-context的发布版本。

0

这个冲突发生了,因为您的某些依赖项已经损坏。按照以下步骤操作: 为了解决这个冲突,只需进入您的.m2文件夹打开储存库并删除该文件夹中的所有文件。现在打开您的项目,在debug模式下执行maven clean操作,并在清理并下载后更新maven项目。您的冲突将得到解决。


0

我也遇到了同样的问题,解决方法是删除 .m2/repository/org 文件夹,然后在 STS 中进行 Maven 更新。


0

我的回答晚了,但可能会对其他人有所帮助。

我在使用 Eclipse IDE 和通过 start.spring.io 创建的 Spring 项目时遇到了同样的问题。我解决问题的方法如下:

  1. 右键单击您的项目。
  2. 选择“Run As”。
  3. 选择“Maven Install”。

目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

0
可能是因为某些依赖项没有正确解决。 您可以尝试将“spring-boot-starter-parent”的版本更改/降级为本地其他工作项目。 例如,我通过将“spring-boot-starter-parent”设置为“1.5.9.RELEASE”而不是“2.3.0.RELEASE”(该版本适用于其他项目)来消除错误。

0
对我来说,只有在新窗口中将子项目作为新项目打开时,第一个答案才有效。您可以尝试删除子项目src\main\main.iml中的main.iml或xxx.iml。这对我很有效。 编辑:不用担心,main.iml是由Idea自动生成的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接