NoClassDefFoundError:org / apache / commons / pool / KeyedObjectPoolFactory BasicDataSource Spring

时间:2014-05-14 12:11:32

标签: spring apache jar apache-commons-dbcp

我是Spring的新手,还在学习。我在Mac上使用Spring Tool Suite 3.5和Java 6。我正在尝试使用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。但我仍然看到NoClassDefFoundErrorKeyedObjectPoolFactory的引用。

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代码没有出现。遗憾。

2 个答案:

答案 0 :(得分:7)

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

的正确版本依赖项

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

干杯,

答案 1 :(得分:0)

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