2013-10-18 3 views
1

내 액세스 데이터베이스에 대한 연결성을 위해 jackcess를 사용하고 있습니다. 하지만 예외를 따르고 있습니다Jackcess "NoClassDefFoundError"예외

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang/builder/CompareToBuilder 
    at com.healthmarketscience.jackcess.impl.RowIdImpl.compareTo(RowIdImpl.java:113) 
    at com.healthmarketscience.jackcess.impl.IndexData$Entry.compareTo(IndexData.java:1838) 
    at com.healthmarketscience.jackcess.impl.IndexData$Entry.compareTo(IndexData.java:1646) 
    at java.util.Collections.indexedBinarySearch(Collections.java:273) 
    at java.util.Collections.binarySearch(Collections.java:259) 
    at com.healthmarketscience.jackcess.impl.IndexData$DataPage.findEntry(IndexData.java:2368) 
    at com.healthmarketscience.jackcess.impl.IndexData.findEntryPosition(IndexData.java:722) 
    at com.healthmarketscience.jackcess.impl.IndexData.access$3300(IndexData.java:56) 
    at com.healthmarketscience.jackcess.impl.IndexData$EntryCursor.updatePosition(IndexData.java:2133) 
    at com.healthmarketscience.jackcess.impl.IndexData$EntryCursor.restorePosition(IndexData.java:2072) 
    at com.healthmarketscience.jackcess.impl.IndexData$EntryCursor.restorePosition(IndexData.java:2055) 
    at com.healthmarketscience.jackcess.impl.IndexData$EntryCursor.beforeEntry(IndexData.java:2017) 
    at com.healthmarketscience.jackcess.impl.IndexCursorImpl.findPotentialRow(IndexCursorImpl.java:368) 
    at com.healthmarketscience.jackcess.impl.IndexCursorImpl.findFirstRowByEntryImpl(IndexCursorImpl.java:262) 
    at com.healthmarketscience.jackcess.impl.IndexCursorImpl.findFirstRowByEntry(IndexCursorImpl.java:135) 
    at com.healthmarketscience.jackcess.impl.DatabaseImpl$DefaultTableFinder.findRow(DatabaseImpl.java:1890) 
    at com.healthmarketscience.jackcess.impl.DatabaseImpl$TableFinder.findObjectId(DatabaseImpl.java:1799) 
    at com.healthmarketscience.jackcess.impl.DatabaseImpl.readSystemCatalog(DatabaseImpl.java:804) 
    at com.healthmarketscience.jackcess.impl.DatabaseImpl.<init>(DatabaseImpl.java:513) 
    at com.healthmarketscience.jackcess.impl.DatabaseImpl.open(DatabaseImpl.java:386) 
    at com.healthmarketscience.jackcess.DatabaseBuilder.open(DatabaseBuilder.java:170) 
    at com.healthmarketscience.jackcess.DatabaseBuilder.open(DatabaseBuilder.java:193) 
    at ass.Access.main(Access.java:25) 
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang.builder.CompareToBuilder 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 23 more 

저는 jdbc를 사용했지만 작동하지 않습니다. 내 문제를 어떻게 해결할 수 있습니까?

답변

2

Jackcess는 Jakarta Commons Langdependency이 있습니다. 커먼 스트링과 다른 의존성이 클래스 경로에 있는지 확인해야합니다. 여기

+0

디 매크로를 이미 평민 로깅을 추가 한 , 코 몬즈 코덱, 포이, junit, log4j. 작동하지 않습니다. 내가 뭘 놓치고 있니? – Sarah

+0

commons lang, http://repo1.maven.org/maven2/commons-lang/commons-lang/2.0/commons-lang-2.0.jar에서 버전 2.0을 다운로드 할 수 있습니다. –

+0

파일 공유를 추가했지만 지금은 있습니다. 이 경고 log4j : WARN logger (com.healthmarketscience.jackcess.impl.DatabaseImpl)에 대한 appender를 찾을 수 없습니다. log4j : WARN log4j 시스템을 올바르게 초기화하십시오. 내가 무엇을 할 수 있을지? – Sarah

4

내가 Jackcess는 윈도우 8에 넷빈즈 7.4 새로 설치를 시작으로 작업 있어요 방법은 다음과 같습니다

내가 통해 최신 Jackcess JAR 파일을 다운로드 한 "최신 버전을 찾고 있나요?" 링크 files 페이지. 내가 폴더에

C를 저장 : commons-lang 버전 2.x 및 commons-logging : 공공 \ 자바 \ \ 사용자 \

Jackcess의 Project Dependencies 페이지에 나와있는 것처럼

, 나는 압축 두 필요한 종속성 바이너리를 다운로드 v1.x. \ 사용자 공공 \ 자바 \ 평민 - 랭 2.6 \
C : \ : 지금 포함, 그래서 내가 두 개의 하위 폴더

C는, 위의 폴더에 ZIP 파일의 압축을 푼 \ 사용자가 공용 \ 자바 \ \을 commons- logging-1.1.3 \

NetBeans를 시작하고 "myJackcessTest"라는 새 프로젝트 (Java 응용 프로그램 용)를 만들었습니다. 나는 세 개의 JAR 파일, "... JAR/폴더 추가"를 선택, "라이브러리"를 마우스 오른쪽 버튼으로 클릭 트리 뷰에서 프로젝트를 확장하고, 추가 :이 작업이 일단

Libraries.png

를, 내가 만들어 내 작은 테스트 애플 리케이션 ...

package myjackcesstest; 

import com.healthmarketscience.jackcess.*; 
import java.io.File; 
import java.io.IOException; 

public class MyJackcessTest { 

    public static void main(String[] args) { 
     try { 
      Table table = DatabaseBuilder.open(new File("C:\\Users\\Public\\Database1.accdb")).getTable("Clients"); 
      System.out.println(String.format("table contains %d row(s)", table.getRowCount())); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

... 그리고 나는 그것을 잘 실행F6 쳤을 때 :

run: 
table contains 1 row(s) 
BUILD SUCCESSFUL (total time: 0 seconds)