2014-05-14 16 views
6

Tôi mới đến Spring, vẫn đang học. Tôi đang sử dụng Spring Tool Suite phiên bản 3.5 với Java 6 trên máy Mac của mình. Tôi đang cố gắng sử dụng BasicDataSourceNoClassDefFoundError: org/apache/commons/pool/KeyedObjectPoolFactory BasicDataSource Spring

<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> 

Tôi có file jar sau trên con đường lớp học của tôi: commons-dbcp-1.4.jar, commons-pool2-2.2.jar, commons-collections4-4.0.jar. Nhưng tôi vẫn thấy một tham chiếu NoClassDefFoundError đến 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) 

tôi đã tìm kiếm một câu trả lời và tìm thấy một existing similar question, nhưng không giống như một đó, tôi đã có những lọ trên classpath của tôi.

Tôi gặp sự cố khi định dạng mã trong diễn đàn này. Mã XML của tôi không xuất hiện. Lấy làm tiếc.

+1

Có thể là một vấn đề với số phiên bản của lọ .... chỉ kiểm tra xem các số phiên bản bạn đã sử dụng cho các lọ có tương thích với nhau không –

+0

Xin chào Raju Rudru, Vâng, tôi đã phát hiện ra rằng đây là vấn đề. – user3636521

Trả lời

6

Bạn đang trộn các phiên bản. Lớp KeyedObjectPoolFactory tồn tại trong chi nhánh 1.x của commons-pool, nhưng không phải trong 2.x. Bạn nên thử với commons-pool-1.5.4 thay thế (phụ thuộc phiên bản chính xác cho commons-dbcp-1.4)

Và tôi có thể đề xuất sử dụng ví dụ: Maven để quản lý phụ thuộc của bạn - bạn sẽ nhận được sự phụ thuộc bắc cầu phiên bản một cách chính xác miễn phí (chủ yếu là ít nhất ...)

Chúc mừng,

+1

Có vẻ như tôi cần đợi 8 giờ trước khi trả lời câu hỏi của riêng mình vì tôi có ít hơn 10 danh tiếng? Nhưng nhờ Anders R.Bystrup và Raju Rudru, Vâng Trong khi chờ đợi, tôi đã phát hiện ra rằng cả hai đều đúng. Đây là API Javadoc dành cho Commons Pool 2.2 API http://commons.apache.org/proper/commons-pool/api-2.2/index.html Và đây là phiên bản 1.6 http: //commons.apache. org/proper/commons-pool/api-1.6/index.html Phiên bản 1.6 là phiên bản cuối cùng chứa KeyedObjectPoolFactory. Vì vậy, tôi đã thu được commons-pool-1.6.jar và thêm nó vào classpath của tôi và giải quyết lỗi. – user3636521

+0

Tôi cũng không thể bỏ phiếu. Nhưng cảm ơn bạn cả hai đều :) – user3636521

+0

@ user3636521, chấp nhận nó như là câu trả lời atleast !! –

Các vấn đề liên quan