【问题标题】:NoClassDefFoundError: org/apache/commons/pool/KeyedObjectPoolFactory BasicDataSource SpringNoClassDefFoundError:org/apache/commons/pool/KeyedObjectPoolFactory BasicDataSource Spring
【发布时间】:2014-07-02 11:49:16
【问题描述】:

我是 Spring 新手,还在学习。我在我的 Mac 上使用带有 Java 6 的 Spring Tool Suite 3.5 版。我正在尝试使用 BasicDataSource

<bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

我的类路径中有以下 jar 文件:commons-dbcp-1.4.jarcommons-pool2-2.2.jarcommons-collections4-4.0.jar。但我仍然看到NoClassDefFoundError 引用KeyedObjectPoolFactory

Error creating bean with name 'dataSource' defined in class path resource [test-   infrastructure-config.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/pool/KeyedObjectPoolFactory
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:630)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:148)

我搜索了一个答案并找到了existing similar question, 但与那个不同的是,我的类路径中有 JAR。

我在此论坛中格式化代码时遇到问题。我的 XML 代码没有出现。对不起。

【问题讨论】:

  • 可能是jar的版本号有问题....只需检查您用于jar的版本号是否相互兼容
  • 嗨 Raju Rudru,是的,我发现这是问题所在。

标签: spring apache jar apache-commons-dbcp


【解决方案1】:

您可以自己导入 .Class。 导入 org.apache.commons.pool.KeyedObjectPoolFactory;

【讨论】:

    【解决方案2】:

    您混淆了版本。 KeyedObjectPoolFactory 类存在于commons-pool 的 1.x 分支中,但不存在于 2.x 中。您应该尝试改用commons-pool-1.5.4(这是commons-dbcp-1.4 的正确版本依赖)

    我可以建议使用例如。 Maven 管理您的依赖项 - 您将免费获得正确版本的传递依赖项(大部分至少......)

    干杯,

    【讨论】:

    • 看来我需要等待 8 小时才能回答我自己的问题,因为我的声望不到 10?但感谢 Anders R.Bystrup 和 Raju Rudru,是的,与此同时,我发现你们都是对的。这是 Commons Pool 2.2 API commons.apache.org/proper/commons-pool/api-2.2/index.html 的 Javadoc,这是 1.6 版 commons.apache.org/proper/commons-pool/api-1.6/index.html 1.6 版是包含 KeyedObjectPoolFactory 的最后一个版本。所以我获得了 commons-pool-1.6.jar 并将其添加到我的类路径并解决了错误。
    • 我也不能投票。不过还是谢谢你们两个:)
    猜你喜欢
    • 1970-01-01
    • 2013-03-25
    • 2018-09-13
    • 2014-02-07
    • 2015-09-23
    • 1970-01-01
    • 2013-07-30
    • 2019-09-02
    • 2017-04-14
    相关资源
    最近更新 更多