我在STS中遇到错误:
无法解析org.springframework.core.env.EnvironmentCapable类型。它是从所需的.class文件间接引用的
答案 0 :(得分:7)
这听起来像是一个传递依赖问题。这意味着您的代码依赖于jar或库来执行某些操作 - 显然,您依赖于Spring框架代码。那么,所有Spring代码也依赖于库和jar。
最有可能的是,您需要将corerctly版本化org.springframework.core
jar添加到类路径中,以便在IDE尝试构建项目时找到EnvironmentCapable
类。
这也可能是一个jar冲突问题,尽管听起来不太可能。当应用程序遇到jar冲突(也称为“dll hell”)时,编译器会查找具有相同完全限定名称的多个jar和类。例如,假设您将Spring添加到类路径以及整个Tomcat服务器库。那么,这两个罐子可能包含相同的命名类,也许是相同的版本,也许是不同的版本。但无论如何,当编译器查找EnvironmentCapable
类时,它会找到两个(在这个设计的例子中) - 一个在Spring jar中,一个在Tomcat jar中。好吧,它不知道选择哪一个,因此会抛出一个ClassDefNotFoundException
,这会/可能表现为你遇到的错误。
答案 1 :(得分:1)
当我在spring-security-config上使用spring security时遇到了同样的错误。在jven中删除了maven repo中的jar并在eclipse中给了maven-> update Project。 它已经解决。请尝试一次。
答案 2 :(得分:0)
从命令行运行“mvn clean install”,您将看到项目失败,您将在日志中看到导致此类问题的工件。 之后,从.m2 / repository中删除工件,然后从eclipse中删除maven。
答案 3 :(得分:0)
为避免jar冲突,请确保在聚合pom.xml的properties标签下声明依赖项版本,并在整个项目中将属性名称用作占位符。例如在父pom中的4.2.5.RELEASE,然后在子模块中,只需使用$ {spring.version}而不是4.2.5.RELEASE。这样,您可以避免在类路径上具有相同库的两个不同版本。
还建议与spring依赖项的版本保持一致。对spring-core,spring-web等使用相同的版本。
如果您使用的是maven,则可以使用maven强制实施器插件来确保依赖项收敛,并避免传递依赖项出现进一步的问题。