8

我在 STS 中遇到以下错误:

org.springframework.core.env.EnvironmentCapable 类型无法解析。它是从所需的 .class 文件中间接引用的

4

4 回答 4

7

这听起来像是一个传递依赖问题。这意味着您的代码依赖于 jar 或库来做某事——显然,您依赖于 Spring 框架代码。好吧,所有的 Spring 代码也依赖于库和 jars。

最有可能的是,您需要将经过正确版本控制的org.springframework.corejar 添加到您的类路径中,以便EnvironmentCapable在您的 IDE 尝试构建您的项目时可以找到该类。

这也可能是一个 jar 碰撞问题,尽管这听起来不太可能。当应用程序遇到 jar 冲突(也称为“dll 地狱”)时,编译器会查找具有相同完全限定名称的多个 jar 和类。例如,假设您将 Spring 以及整个 Tomcat 服务器库添加到类路径中。好吧,这两个 jar 可能包含完全相同的命名类,可能是相同的版本,也可能是不同的版本。但无论哪种方式,当编译器查找EnvironmentCapable该类时,它会找到两个(在这个人为的示例中) - 一个在 Spring jar 中,一个在 Tomcat jar 中。好吧,它不知道该选择哪一个,因此它会抛出一个ClassDefNotFoundException,这将/可能表现为您遇到的错误。

于 2013-12-10T15:30:09.023 回答
1

我在spring-security-config.i上使用spring security时遇到了同样的错误。我在maven repo中删除了那个jar,并在eclipse中给出了maven->update Project。已解决。请尝试一次。

于 2017-04-25T18:36:03.710 回答
0

从命令行运行“mvn clean install”,您会看到项目失败,并且您会在日志中看到导致此类问题的工件。之后,从 .m2/repository 中删除工件,然后从 eclipse 中更新 maven。

于 2018-05-27T16:40:49.777 回答
0

为避免 jar 冲突,请确保在聚合 pom.xml 中的 properties 标记下声明依赖版本,并在整个项目中使用属性名称作为占位符。例如父 pom 中的 4.2.5.RELEASE,然后在子模块中只需使用 ${spring.version} 而不是 4.2.5.RELEASE。这样,您可以避免在类路径上有同一个库的两个不同版本。

另外建议与spring依赖的版本保持一致。对 spring-core、spring-web 等使用相同的版本。

如果您使用的是 maven,那么您可以使用 maven enforcer 插件来确保依赖收敛,并避免传递依赖的进一步问题。

于 2018-11-29T18:43:28.663 回答